java - Java 8 流的最大值(Math::max)
问题描述
当我进行测试时,我遇到了流的问题。
代码如下:
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() 时,它会返回最大值。为什么?
解决方案
这在某种程度上非常微妙,让我们一次取两个:
-2, -5 => Max between these two is "-2"
这是一个否定的结果,因为max
来自 a 的方法stream
接受 a Comparator
,它说:
如果第一个参数小于第二个参数,则返回一个负整数。
因此,根据您的说法Comparator
,您刚刚说过-5
>-2
或更简单的话:
Stream.of(-2, -5)
.max(Math::max)
.ifPresent(System.out::println); // will show -5
您可以从这里为其他数字构建逻辑,并了解-16
您得到结果的原因。
要做到这一点,您需要:
...max(Comparator.naturalOrder())
....
推荐阅读
- python - 如何使用 JWT 方法打开 SalesForce?
- android - 节点可以替换为具有复合可绘制对象的“TextView”
- regex - 正则表达式字符串不以 Kubernetes Ingress 的子字符串开头
- c++ - 程序“从字符串中删除重复的单词”中的错误
- javascript - CKeditor 删除开头的多余空格 - 修剪
- jquery - 在输入字段中生成 url 结构
- php - 如何使用 laravel 计算状态 = 1 的表中的记录数?
- php - Mysql where 多个字段上的子句,其中一个可能为空
- abp - Abp 一对多关系
- lighthouse - 灯塔不一致,该如何处理?