Java 8 流 : collector returning filtered object

标签 java hashmap java-stream

假设我有一个集合,我想过滤到每所学校最旧的集合。

到目前为止我已经:

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/

相关文章:

Java Webstart 无法脱机工作(NoRouteToHostException/UnknownHostException)

java - while 循环不起作用? java

java : cannot set Map field

java - 如何用Java使用Windows Photo Gallery显示gif图像?

java - 如何使用 Mongodb java 获取文档数组?

JAVA:Hashmap - 返回字符串数组列表

java - 如何在删除对象之前清除集合

java - 如何计算嵌套列表的项目?

Java 8 - 单词计数,然后按降序排列

java intstream并行循环省略数据