我在Java中具有以下配置:
Student {
private List<Note> notes;
}
Note {
private int value;
// Constructor - getters - setters
}
School {
Private List<Student> students;
// Constructor - getters - setters
}
我想要以下行为:
学生:
S1 : note1(value=10), note2(value=16)
S2 : note1(value=7), note2(value=18), note3(value=2)
S3 : note1(value=19)
我想用一个学校列表来管理一个对象:
Manage {
private List<School> schools;
}
我想让那所学生的音调更高的学校。
在此示例中:结果是S3,因为我们有一名学生的音高为19。
如何使用Java Stream实现这种行为?
答案 0 :(得分:1)
您可以在所有Stream<Map.Entry<School,Student>>
和School
对中创建一个Student
,然后找到具有Student
且最大值的条目。
为此,我建议向Student
类添加getMaxValue()
方法,该方法将返回所有Student
s Note
s的最大值。
Optional<School> school =
schools.stream()
.flatMap(sc -> sc.getStudents()
.stream()
.map(st -> new SimpleEntry<>(sc,st)))
.collect(Collectors.maxBy(Comparator.comparing(e -> e.getValue().getMaxValue())))
.map(Map.Entry::getKey);