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

时间:2020-02-21 07:28:25

标签: java stream

我在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实现这种行为?

1 个答案:

答案 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);