Допустим, у меня есть 2 класса.
Курс класса
public class Course {
private int id;
private String name;
}
Студенческий класс
public class Student {
private int id;
private String name;
private List<Course> courses;
}
У меня есть List<Student>
, и каждый Student
зачислен на несколько курсов.
Мне нужно отфильтровать результаты с помощью потокового API Java 8 следующим образом.
Map<courseId, List<Student>>
Я пробовал ниже, но безуспешно:
1-й подход
Map<Integer, List<Student>> courseStudentMap = studentList.stream()
.collect(Collectors.groupingBy(
student -> student.getCourses().stream()
.collect(Collectors.groupingBy(Course::getId))));
2-й подход
Map<Integer, List<Student>> courseStudentMap = studentList.stream()
.filter(student -> student.getCourses().stream()
.collect(Collectors.groupingBy(
Course::getId, Collectors.mapping(Student::student, Collectors.toList()))));