2 回答
TA贡献1815条经验 获得超13个赞
设置我想过滤到每所学校最老的。
假设最老的每所学校意味着最老Person的 perschool,您可能正在寻找如下输出:
Map<String, Person> getOldestPersonPerSchool(Set<Person> persons) {
return persons.stream()
.collect(Collectors.toMap(
Person::getSchoolname, // school name
Function.identity(), // person
(a, b) -> a.getAge() > b.getAge() ? a : b)); // ensure to store oldest (no tie breaker for same age)
}
TA贡献1853条经验 获得超9个赞
您可以通过中间分组来实现这一点,然后只values()在生成的分组列表中流式传输,您只需选择最年长的人
Set<Person> oldestPerSchool = persons.stream() // Stream<Person>
.collect(Collectors.groupingBy(Person::getSchoolname)) // Map<String, List<Person>>
.values().stream() // Stream<List<Person>>
.map(list -> list.stream() // (Inner) Stream<Person>
.max(Comparator.comparingInt(Person::getAge)) // (Inner) Optional<Person>
.get() // (Inner) Person
) // Stream<Person>
.collect(Collectors.toSet()); // Set<Person>
添加回答
举报