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>
添加回答
舉報