进行测试时,我遇到了问题。
代码如下:
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);
}
}
返回值为-15(列表中的最小数字)。 但是,当我将max()更改为min()时,它将返回最大值。为什么?
答案 0 :(得分:7)
这有点微妙,让我们一次取两个:
-2, -5 => Max between these two is "-2"
这是阴性结果,因为max
中的stream
方法接受Comparator
,它表示:
如果第一个参数小于第二个参数,返回一个负整数。
因此,根据您的Comparator
,您刚刚说过-5
> -2
或更简单:
Stream.of(-2, -5)
.max(Math::max)
.ifPresent(System.out::println); // will show -5
您可以从此处构建其他数字的逻辑,并了解为什么得到-16
。
要纠正此错误,您需要:
...max(Comparator.naturalOrder())
....