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

Java 8 stream max()函数参数类型比较器与可比

柴文林
2023-03-14
public class Test {
    public static void main(String[] args) {
        List<Integer> intList = IntStream.of(1,2,3,4,5,6,7,8,9,10).boxed().collect(Collectors.toList());
        int value = intList.stream().max(Integer::compareTo).get();

        //int value = intList.stream().max(<Comparator<? super T> comparator type should pass here>).get();

        System.out.println("value :"+value);
    }
}
public final class Integer extends Number implements Comparable<Integer> {
    public int compareTo(Integer anotherInteger) {
        return compare(this.value, anotherInteger.value);
    }
}

我知道我误解了一些事情,但我现在知道是什么了。谁能解释一下吗?

共有1个答案

敖永丰
2023-03-14
int value = intList.stream().max(Integer::compareTo).get();

上面的代码片段在逻辑上等效于以下内容:

int value = intList.stream().max((a, b) -> a.compareTo(b)).get();

它在逻辑上也等效于以下内容:

int value = intList.stream().max(new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        return a.compareTo(b);
    }
}).get();

comparator是一个函数接口,可以用作lambda或方法引用,这就是代码编译和执行成功的原因。

 类似资料:
  • 我看到了这篇关于用lambdas颠倒顺序的文章,但有一件事甚至让我对传统的比较器实现(或匿名内部类)感到困惑:为什么将第二个参数与第一个参数进行比较会颠倒顺序?

  • 我有以下课程: 这编译没有问题。但是,如果我尝试像这样内联变量: 我发现以下编译错误: 如何编写此表达式以使Java正确理解参数?

  • 问题内容: 只是通过学习python并开始研究嵌套/工厂函数(简单示例): 与创建类相比,工厂功能有什么优势吗?性能?记忆?清理? 问题答案: 我最喜欢嵌套函数的地方是,它比类少冗长。与您的maker函数等效的类定义为: 在您开始向构造函数添加更多参数之前,这似乎并不算糟糕。然后,以类的方式为每个参数增加一行,而函数仅获得额外的args。 事实证明,嵌套函数也具有速度优势: 这可能是由于嵌套函数版

  • 我试图通过对象属性NodeID排序一个对象,这是一个长类型。 有什么方法可以通过对象属性NodeID对PeerNode的ArrayList进行排序吗??

  • 问题内容: Comparable和Comparator之间的主要区别是什么。 在什么情况下,哪个比另一个优先? 问题答案: 当你的类实现时,该类的方法将定义该对象的“自然”顺序。根据合同,该方法有义务(尽管不要求)与该对象上的其他方法保持一致,例如,当比较返回true 时,应始终为对象返回0 。 一个比较本身就是如何比较两个对象的定义,可用于可能不与自然顺序排列的方式来比较的对象。 例如,字符串通

  • 实际上我是初学者,我的问题可能很傻,我怀疑java中方法和构造函数的实际用途是什么, 我们可以在这两种方法中传递值 推荐哪一种?为什么??