当前位置: 首页 > 知识库问答 >
问题:

获取具有最大值的对象列表[重复]

柴辰阳
2023-03-14

我必须得到包含最大值的对象列表。Java8中的比较器max只返回一个对象。

为了做到这一点,我必须流式地显示两次列表:

 OptionalInt max = students.stream()
            .mapToInt(student -> student.getAssignedProjects().size())
            .max();

    return this.students.stream()
            .filter(student -> student.getAssignedProjects().size() == max.getAsInt())
            .collect(Collectors.toSet());

这个解决方案有效。我想有一个更好的方法来解决这个问题,但我想不出来。

共有1个答案

王宏扬
2023-03-14

如果需要单个管道,可以根据该属性对students进行分组,如果为输出生成treemap,则将对其进行排序,因此可以访问与最大值对应的set:

return
this.students()
    .stream()
    .collect(Collectors.groupingBy(student -> student.getAssignedProjects().size(),
             TreeMap::new,
             Collectors.toSet()))
    .lastEntry()
    .getValue();

当然,如果具有最大值的student的数量相对于输入列表的大小较小,那么对分组的student进行排序将是低效的(创建treemap就是这样做的)。您的原始代码会更高效。

 类似资料:
  • 问题内容: 因此,我有一个包含几个列表的列表,这些列表都首先包含三个字符串,然后是一个浮点数,例如: 如何制作一个返回最大值的函数(此处为9.1931)?我试过了 但这只是给我一个清单。 编辑:此外,以任何方式我可以获取值来自何处的索引?喜欢,来自哪个子列表? 问题答案: 循环浏览外部列表,然后选择每个子列表的最后一个元素: 最好将所有与函数相关的变量保留在范围内(将列表作为参数传递,并且不要通过

  • 问题内容: 桌子: 我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle) 更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。 问题答案: 这将检索其my_date列值等于该用户ID的my_date最大值的所有行

  • 问题内容: 我正在处理一个Postgres表(称为“lives”),该表包含带有,和列的记录。我需要一个查询,该查询将为我提供每个usr_id的最新live_remaining总数 有多个用户(与usr_id不同) time_stamp不是唯一的标识符:有时,用户事件(表中的每一行)将使用相同的time_stamp发生。 trans_id仅在很小的时间范围内是唯一的:随着时间的流逝,它会重复 (对

  • 问题内容: 我有一类称为具有可变的。 我想退出具有最大变量的。 我知道可以通过编写一个自定义比较器并使用来完成此操作,但是我想知道在Java 8中是否可以通过使用自定义比较器来完成此操作,因为我只想使用一个最长日期仅出现在我的代码中的某个位置,并且该类不应始终使用变量来比较实例。 问题答案: 并且Contact类不应该总是使用lastUpdated变量来比较实例 因此,每当要按实例的属性比较多个实

  • 问题内容: 是否有一种简单的方法可以从对象数组列表中的一个对象的字段中获取最大值? 例如,出于下面的对象,我希望获得“值”字段的最高值。 我想从中获取ValuePairs.mValue的最大值的示例arraylist。 创建存储在arraylist中的对象的类: 我正在通过做类似的事情来获取mValue的最大值(我知道这是不正确的): dMax应该为50.00。 任何帮助表示赞赏。谢谢! 问题答案

  • 我有这样的课: 和类似的列表,其中填充了元素。 如何使用Java8获得的最小值和最大值?