当前位置: 首页 > 面试题库 >

Java 8 Stream-具有重复项的.max()

洪永长
2023-03-14
问题内容

因此,我有一组对象,这些对象的阶跃变量可以为1-4。

public class MyClass {
    private Long step;

    //other variables, getters, setters, etc.
}

Collection<MyClass> myOjbects = /*get collection*/;

然后,我想MyClass从具有最大步进值的集合中获取一个实例,因此我这样做:

final Optional<MyClass> objectWithMaxStep =
   myObjects.stream().max(Comparator.comparing(MyClass::getStep));

但是,在某些情况MyClass下,集合中将存在多个实例,这些实例的步骤等于4。

因此,我的问题是,如何确定在中返回哪个实例Optional,或者当流中的多个对象具有要比较的最大值时,它是否引发异常?

max()函数的Java 8文档未指定在这种情况下会发生什么。


问题答案:

max被实现以减少收集maxBy

 public static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) {
        Objects.requireNonNull(comparator);
        return (a, b) -> comparator.compare(a, b) >= 0 ? a : b;
    }

在这里comparator.compare(a, b) >= 0 ? a : b您可以看到,当2个元素相等时,即compare返回0,则返回第一个元素。因此,根据您的情况,将 首先
MyClass具有最高的集合对象中返回step

更新:
作为用户the8472在注释中正确提及,您不应依赖于javadocs未明确指定的实现。但是您可以在max方法上编写单元测试,以了解标准Java库中逻辑是否已更改。



 类似资料:
  • 我知道,不允许重复。例如,如果我有一个词“RABSAB”。 上述字符串的二进制搜索树是: 如果我们想在树中包含重复项呢。这棵树将如何改变?我在一次采访中被问到这个问题。 他们让我画: 二叉树 不平衡二叉搜索树 没有重复项的二叉搜索树 具有重复项的二叉搜索树 感谢您的帮助! PS:帮我画相关的树

  • 问题内容: 我有一个numpy值数组: 我想从数组中删除具有重复值的行。例如,上述数组的结果应为: 我不确定如何使用numpy有效地做到这一点而无需循环(数组可能会很大)。有人知道我该怎么做吗? 问题答案: 这是一个选择:

  • 问题内容: 我必须清理具有重复行的表: 一个可能具有多个值: 我想对整个表执行一个查询,并删除和重复的所有行。在上面的示例中,删除后,我只想剩下1、2、4和5。 问题答案: ;WITH x AS ( SELECT id, gid, url, rn = ROW_NUMBER() OVER (PARTITION BY gid, url ORDER BY id) FROM dbo.table ) SEL

  • 我有两张桌子:订单 订单详情 产品介绍 我想在product_ID1和4的订单详细信息中找到所有记录(因此尝试查看一个订单何时包含这两种产品)。因此运行此代码-INNER JOIN创建一个结果表,该表仅包含包含产品1、4或1和4的订单。 然后我要计算所有“订单详细信息”。order\u ID重复-这些是包含1和4的所有订单(注意-普通数据库-给定订单包含的产品不超过1个)。 这是我的代码-不太管用

  • 问题内容: 我有两个列表,其中包含许多相同的项目,包括重复的项目。我想检查第一个列表中的哪些项不在第二个列表中。例如,我可能有一个这样的列表: 还有一个像这样的列表: 比较这两个列表,我想返回第三个列表,如下所示: 我目前正在使用一些我之前确定的糟糕代码,我可以肯定它甚至无法正常工作,如下所示。 我怎样才能更好地完成这项任务? 问题答案: 您没有指定订单是否重要。如果没有,则可以在> = Pyth

  • 问题内容: 我有一个对象数组,希望根据特定的对象对进行修剪。我想创建一个数组,此特定对仅包含一个对象。将重复项的哪个对象复制到新数组并不重要。 例如,我要基于的属性进行修整,创建一个仅包含每个值之一的新数组: 会成为: 是否存在会循环执行此操作的JavaScript或Angular函数? 编辑:要筛选的属性嵌套在另一个属性中。 问题答案: 您可以为此使用下划线: