Java 8流';s max(数学::max)
当我进行测试时,我遇到了流的问题 代码如下:Java 8流';s max(数学::max),java,java-8,java-stream,Java,Java 8,Java Stream,当我进行测试时,我遇到了流的问题 代码如下: public class HelloWorld { public static void main(String []args) { List<Integer> integers = Arrays.asList(-2, -5, -7, -16); Integer integer = integers.stream().max(Math::max).orElse(0); System.out.println
public class HelloWorld {
public static void main(String []args) {
List<Integer> integers = Arrays.asList(-2, -5, -7, -16);
Integer integer = integers.stream().max(Math::max).orElse(0);
System.out.println(integer);
}
}
公共类HelloWorld{
公共静态void main(字符串[]args){
列表整数=数组.asList(-2,-5,-7,-16);
整数=integers.stream().max(数学::max).orElse(0);
System.out.println(整数);
}
}
返回值为-15,是列表中的最小值。
但当我将max()更改为min()时,它会返回最大值。为什么?这有点微妙,让我们一次拿两个:
-2, -5 => Max between these two is "-2"
这是一个否定的结果,因为来自流的max
方法接受比较器,该比较器表示:
如果第一个参数小于第二个参数,则返回负整数
因此,根据您的比较器
,您刚才说过-5
-2
,或者用更简单的话来说:
Stream.of(-2, -5)
.max(Math::max)
.ifPresent(System.out::println); // will show -5
您可以从这里构建其他数字的逻辑,并理解为什么得到的结果是-16
要更正此错误,您需要:
...max(Comparator.naturalOrder())
....
integers.stream().min(数学::min).orElse(0)
。。。这为我返回了-2
。Math.max(-2,-5)
返回了-2
,Stream.max
如何解释这个结果?你能解释一下我为什么要比较“-2,-5”两次吗?首先我们在Math::max内部比较,然后在max()中比较吗?@lbrobino我不明白你的评论,对不起。想一想,stream::max
需要一个比较器
,你说这个比较器
是通过使用Math::max
实现的,所以它与顺序有关,对吗?@lbrobino再次强调,我在这里不是在读思想的世界。。。什么顺序?如果数组是-16,-7,-5,-2,那么这是正确的答案,我尝试了naturalOrder(),并且理解了你所说的。非常感谢。