使用流的最大值和最小值将错误的预期输出显示为“ 3 3”,而不是“ 3 5”

问题描述 投票:1回答:1

我有以下代码

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());

为什么我得到的输出为“ 3 3”而不是“ 3 5”。请澄清。

java collections java-stream functional-interface
1个回答
0
投票

其背后的原因是所使用的Comparator。您正在排序之后反转元素,同时从中取出max。当然了max的倒数是min,您将得到相同的结果。

解决方案是替换

Optional<Integer> i = gt.max(Comparator.reverseOrder());

Optional<Integer> i = gt.max(Comparator.naturalOrder());

[在稍微不同的方面,当您同时从整数流中查找maxmin时,可以使用JDK中的摘要统计信息。看起来像-->

IntSummaryStatistics statistics = li.stream().mapToInt(i -> i).summaryStatistics();
int max = statistics.getMax();
int min = statistics.getMin();
© www.soinside.com 2019 - 2024. All rights reserved.