Найти в Дзене
DEBAGanov

Java 565. Как из заданного списка студентов сгруппировать студентов по предметам?

Чтобы из заданного списка студентов сгруппировать студентов по предметам, можно использовать метод groupingBy(). Предположим, что у нас есть класс Student, который содержит поля name и courses. Поле courses содержит список предметов, которые брал студент. Для того чтобы сгруппировать студентов по предметам, можно использовать метод groupingBy() и передать ему функцию, которая принимает объект Student и возвращает список предметов, которые брал этот студент: import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Student {
private String name;
private List<String> courses;
public Student(String name, String... courses) {
this.name = name;
this.courses = Arrays.asList(courses);
}
public String getName() {
return name;
}
public List<String> getCourses() {
return courses;
}
}
public class Main {
public static void main(String[] args) {
List<Stude

Чтобы из заданного списка студентов сгруппировать студентов по предметам, можно использовать метод groupingBy().

Предположим, что у нас есть класс Student, который содержит поля name и courses. Поле courses содержит список предметов, которые брал студент. Для того чтобы сгруппировать студентов по предметам, можно использовать метод groupingBy() и передать ему функцию, которая принимает объект Student и возвращает список предметов, которые брал этот студент:

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Student {
private String name;
private List<String> courses;

public Student(String name, String... courses) {
this.name = name;
this.courses = Arrays.asList(courses);
}

public String getName() {
return name;
}

public List<String> getCourses() {
return courses;
}
}

public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Alice", "Math", "History"),
new Student("Bob", "English", "Math", "Science"),
new Student("Charlie", "Art", "Music"),
new Student("David", "Math", "Science")
);

Map<String, List<Student>> studentsByCourse =
students.stream()
.flatMap(s -> s.getCourses().stream().map(c -> new Object[]{c, s}))
.collect(Collectors.groupingBy(a -> (String)a[0], Collectors.mapping(a -> (Student)a[1], Collectors.toList())));

System.out.println("Students by course: " + studentsByCourse);
}
}

В этом примере мы создаем список students, содержащий объекты класса Student, заполняем его данными и затем используем метод flatMap() для объединения всех списков предметов всех студентов в один список, а затем создаем пары элементов (предмет, студент), используя метод map(). Затем мы используем метод groupingBy() для группировки студентов по предметам. Результатом является карта, в которой ключами являются предметы, а значениями - списки студентов.

Затем мы выводим эту карту в консоль. Обратите внимание, что для каждого предмета может быть несколько студентов.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov