[英]Incorrect expected output as “ 3 3” instead “3 5” using max and min from Streams
我有以下代码
List<Integer> li = new ArrayList<Integer>();
li.add(3);li.add(5);
Stream at = li.stream();
Optional<Integer> o = at.min(Comparator.naturalOrder());
if (o.isPresent()) {System.out.println(o.get());}
Stream gt = li.stream();
Optional<Integer> i = gt.max(Comparator.reverseOrder());
System.out.println(i.get());
为什么我将 output 设为“3 3”而不是“3 5”。 请说清楚。
其背后的原因是使用的Comparator
器。 您在排序后反转元素,同时max
地利用它们。 当然, max
的反面是min
,你会得到相同的结果。
解决方案是更换
Optional<Integer> i = gt.max(Comparator.reverseOrder());
和
Optional<Integer> i = gt.max(Comparator.naturalOrder());
在稍微不同的方面,当您同时从 integer stream 中查找max
和min
时,您可以使用来自 JDK 的汇总统计信息。 这看起来像 -
IntSummaryStatistics statistics = li.stream().mapToInt(i -> i).summaryStatistics();
int max = statistics.getMax();
int min = statistics.getMin();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.