java max(int integer)_Java 8 Lambdas max()使用Integer.max作为比较器

参见英文答案 > Java 8 stream’s .min() and .max(): why does this compile?                                    5个

我已经编写了带有示例值的简单列表,我希望流从Stream返回最大值.我知道max()函数需要Comparator,但事实证明,我也可以传递Integer :: max(任何人都可以解释我的,为什么?).

此外,程序打印出奇怪的结果,我在“内部”检查它看起来没问题,但在我得到最终结果后 – 它们不准确.

例:

@Test

public void testHowIntegerMaxWorksInStream() {

List list = Arrays.asList(5,3,8);

Optional op = list.stream().max((a, b) -> {

System.out.println("Input arguments a=" + a + ", b=" + b);

int max = Integer.max(a, b);

System.out.println("Returning max(a,b)=" + max);

return max;

});

System.out.println("Optional result=" + op.get());

}

输出:

Input arguments a=5, b=3

Returning max(a,b)=5

Input arguments a=5, b=8

Returning max(a,b)=8 // OK, Integer::max got 8.. but then ...

Optional result=5 // .. I got 5. WHY ???

我的问题:

>为什么我可以通过Integer :: max代替Comparator?

>为什么我的函数在8的内部返回5?

解决方法:

因为您创建Comparator始终返回第一个元素是最大的.

如果比较A和B,如果A较小,则应返回-1.返回A和B的Integer.max,在您的情况下,始终> 0.

(a,b) -> {

if (a>b) return 1; // 8 :)

if (a

if (a==b) return 0;

}

标签:java,lambda,java-8

来源: https://codeday.me/bug/20190715/1465764.html


版权声明:本文为weixin_39884078原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。