假设我有一个集合,我想过滤到每所学校最旧的集合。
到目前为止我已经:
Map<String, Long> getOldestPerSchool(Set<Person> persons) {
return persons.stream().collect(Collectors.toMap(Person::getSchoolname, Person::getAge, Long::max);
}
问题是,我想要整个人,而不仅仅是名字。但如果我将其更改为:
Map<Person, Long> getOldestPerSchool(Set<Person> persons) {
return persons.stream().collect(Collectors.toMap(p -> p, Person::getAge, Long::max);
}
我得到了所有人,而且我不一定需要 map 。
最佳答案
Set that I'd like to filter down to the oldest per school.
假设每所学校最古老的意思是每学校
最古老的人
,您可能正在寻找如下输出:
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)
}
关于Java 8 流 : collector returning filtered object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54518954/