Java 不正确的预期输出为;“3”;取而代之的是;3.5“;使用流中的最大值和最小值

Java 不正确的预期输出为;“3”;取而代之的是;3.5“;使用流中的最大值和最小值,java,collections,java-stream,functional-interface,Java,Collections,Java Stream,Functional Interface,我有以下代码 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(); Op

我有以下代码

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());
List li=new ArrayList();
加上(3);加上(5);
Stream at=li.Stream();
可选o=at.min(Comparator.naturalOrder());
if(o.isPresent()){System.out.println(o.get());}
Stream gt=li.Stream();
可选i=gt.max(比较器反转顺序());
System.out.println(i.get());

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

背后的原因是使用了
比较器。排序后,您正在反转元素,同时从中获取
max
。当然是 与
max
相反的是
min
,您会得到相同的结果

解决办法是替换

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

其背后的原因是使用了
比较器
。排序后,您正在反转元素,同时从中获取
max
。当然是 与
max
相反的是
min
,您会得到相同的结果

解决办法是替换

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

反向顺序的最大值-反向顺序中的最后一个元素-是最小值。反向顺序的最大值-反向顺序中的最后一个元素-是最小值。因此,根据我的Qn,最大值和最小值方法,它指的是最大值还是最大位置的值?@mpmuthu它指的是最大值,而不是最大索引的值。因此,根据我的Qn,最大和最小方法,它指的是最大值还是最大位置的值?@mpmuthu它指的是最大值,而不是最大索引的值。
IntSummaryStatistics statistics = li.stream().mapToInt(i -> i).summaryStatistics();
int max = statistics.getMax();
int min = statistics.getMin();