从包含另一个列表的列表中获取元素

问题描述 投票:0回答:1

我使用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实现此行为?

java stream
1个回答
0
投票

您可以在所有Stream<Map.Entry<School,Student>>School对中创建一个Student,然后找到具有Student和最大值的条目。

为此,我建议将Student方法添加到getMaxValue()类,该方法将返回所有Student sNotes的最大值。

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);
© www.soinside.com 2019 - 2024. All rights reserved.