groupingBy
выполнит задание, если вы поможете ему: вы можете найти эквивалентную версию этого в Javadoc для groupingBy .
final List students = ...;
// @formatter:off
students.stream()
.flatMap(student -> student.grades.stream()
.map(grade -> new StudentGrade(student, grade)))
.collect(groupingBy(StudentGrade::getGrade, mapping(StudentGrade::getStudent, toList())));
// @formatter:on
Теперь вы получаете a Map
.
Вам понадобятся следующие импортеры:
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
Класс StudentGrade
прост:
class StudentGrade {
private final Student student;
private final Integer grade;
public StudentGrade(Student student, Integer grade) {
this.student = student;
this.grade = grade;
}
public Student getStudent() {return student;}
public Integer getGrade() {return grade;}
}