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()时,它会返回最大值.为什么?
这在某种程度上非常微妙,让我们一次拿两个:
-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)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |