繁体   English   中英

不正确的预期 output 为“3 3”而不是“3 5”,使用来自 Streams 的最大值和最小值

[英]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 中查找maxmin时,您可以使用来自 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM