我正在尝试了解流并遇到一个问题:我想获取列表的最小值并将其分配给一个 int 变量。为此,我做了以下事情:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int smallest = list.stream().min(Integer::compareTo).get();
System.out.println(smallest);
这很好用,结果我得到 1
。问题是 IDE 发出警告,即在检查 Optional.get
之前调用了 .isPresent
。为了解决这个问题,我使用了稍微不同的 ifPresent
方法并尝试了以下方法:
int smallest = list.stream().min(Integer::compareTo).ifPresent(integer -> integer);
不幸的是,这不起作用,因为我收到警告: Bad return type in Lambda, Integer cannot be converted to void.
我的问题最后是:如何通过检查 ifPresent 将最小值分配给 int smallest
变量?
原文由 Stefan B 发布,翻译遵循 CC BY-SA 4.0 许可协议
Stream#min
返回Optional
结果,因为一般流可以为空,所以不可能有最小值。要从 Optional 获得价值,你需要有一些后备价值
最简单的方法是使用
orElse
再长一点就是
isPresent