Java 8流的最大值(Math :: max)

lbr*_*nho 2 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(integer);

    }
} 
Run Code Online (Sandbox Code Playgroud)

返回值为-15,即列表中的最小数字.但是当我将max()更改为min()时,它会返回最大值.为什么?

Eug*_*ene 7

这在某种程度上非常微妙,让我们一次拿两个:

 -2, -5 => Max between these two is "-2"
Run Code Online (Sandbox Code Playgroud)

这是一个否定的结果,因为max来自a的方法stream接受a Comparator,其中说:

如果第一个参数小于第二个参数,则返回负整数.

因此,根据你的说法Comparator,你刚才说-5> -2或者用简单的话说:

Stream.of(-2, -5)
            .max(Math::max)
            .ifPresent(System.out::println); // will show -5
Run Code Online (Sandbox Code Playgroud)

您可以从此处为其他数字构建逻辑,并了解为什么-16会得到结果.

为了使其正确,您需要:

 ...max(Comparator.naturalOrder())
   ....
Run Code Online (Sandbox Code Playgroud)

  • 如果数组是-16,-7,-5,-2,那么它是正确的答案,我尝试了naturalOrder(),并了解你所说的内容.谢谢. (2认同)