gpt4 book ai didi

java - Stream.max(Integer::max) :意外结果

转载 作者:行者123 更新时间:2023-12-01 21:13:09 27 4
gpt4 key购买 nike

我正在学习1z0-809 : Java SE 8 Programmer II使用 Enthuware 的模拟测试。

遇到这个问题。

List<Integer> ls = Arrays.asList(3,4,6,9,2,5,7);

System.out.println(ls.stream().reduce(Integer.MIN_VALUE, (a, b)->a>b?a:b)); //1
System.out.println(ls.stream().max(Integer::max).get()); //2
System.out.println(ls.stream().max(Integer::compare).get()); //3
System.out.println(ls.stream().max((a, b)->a>b?a:b)); //4

Which of the above statements will print 9?

答案是

1 and 3

但是还有其他事情。我不明白为什么

System.out.println(ls.stream().max(Integer::max).get()); // PRINTS 3
<小时/>

我尝试使用 peek 来调试它但这无助于我理解。

我尝试排序ls使用Integer::maxInteger::compare

ls.sort(Integer::max);     // [3, 4, 6, 9, 2, 5, 7]
ls.sort(Integer::compare); // [2, 3, 4, 5, 6, 7, 9]

当然,我知道 Integer::max不是比较器,因此它具有与比较器相同的签名。对我来说,max应该是7在第一种情况下,因为它是最后一个元素,就像我用 Integer::compare 排序时一样

有人可以将其分解为简单的事情吗?

最佳答案

Integer.max(a, b) 将返回给定 ab 中的较大值。如果您以某种方式使用该结果作为比较器,则返回的正值将被视为表示 a > b,因此 a 将被保留。

前两个元素是 3 和 4。都是正数。 Integer.max(3, 4) = 4 > 0。因此,您实际上是在使用这样的比较器来表示 3 > 4,因此保留 3。然后,其余部分也是如此:Integer.max(3, 6) = 6 > 0,因此 3 被认为是最大值,等等

关于java - Stream.max(Integer::max) :意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58893270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com