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(),并且理解了你所说的。非常感谢。