java - 如何使用流编译具有给定属性最大值的所有对象的列表?

标签 java max java-stream filtering

假设我有一个 People 列表,其中包含属性名称和年龄。如何使用流获取具有最大属性 age 值的 People 的所有实例?

目前,我使用的是两步法:

1)寻找年龄的最大值

int maxAge = group
        .stream()
        .mapToInt(person -> person.getAge())
        .max()
        .orElse(-1);

2) 创建一个包含该年龄段的的列表

List<Group> groupWithMaxAge = group
        .stream()
        .filter(person -> person.getAge() == maxAge)
        .collect(Collectors.toList());

别担心,这行得通。但是,请考虑计算年龄是一个开销很大的函数的情况。那样的话,能一次性搞定就好了不是吗?

最佳答案

您还可以将 groupingBy 与 TreeMap 一起用作 mapFactory:

List<Group> list = people.stream()
            .collect(groupingBy(Group::getAge, TreeMap::new, toList()))
            .lastEntry()
            .getValue();

关于java - 如何使用流编译具有给定属性最大值的所有对象的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54592343/

相关文章:

java - 如何编辑 MANIFEST 文件以管理员身份运行 JAR? ( window )

java - 在 switch 语句中测试(junit)默认情况?

SQL 使用 max() 进行多个内连接以获取最新记录的条目

c - INT_MAX 在 If 语句中的行为不正确

java - 根据 Stream api 的条件将列表拆分为子列表

java - IntStream 映射函数行为

javascript - 无法解析模块

Java如何向文件添加新行

java - 我想通过递归算法在链表中找到最大节点,但我的代码有问题

java - 为什么 .filter 不从我的 Map<String,Object> 中删除空值