我有一个列表Integer
list
,并从list.stream()
我想要的最大值。最简单的方法是什么?我需要比较器吗?
Answers:
您可以将流转换为IntStream
:
OptionalInt max = list.stream().mapToInt(Integer::intValue).max();
或指定自然顺序比较器:
Optional<Integer> max = list.stream().max(Comparator.naturalOrder());
或使用减少操作:
Optional<Integer> max = list.stream().reduce(Integer::max);
或使用收集器:
Optional<Integer> max = list.stream().collect(Collectors.maxBy(Comparator.naturalOrder()));
或使用IntSummaryStatistics:
int max = list.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();
int
,则mapToInt(...).max().getAsInt()
或者链接 reduce(...).get()
到方法链
另一个版本可能是:
int maxUsingCollectorsReduce = list.stream().collect(Collectors.reducing(Integer::max)).get();
正确的代码:
int max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));
要么
int max = list.stream().reduce(Integer.MIN_VALUE, Integer::max);
随着流和减少
Optional<Integer> max = list.stream().reduce(Math::max);
Integer::max
完全相同)。
int value = list.stream().max(Integer::compareTo).get();
System.out.println("value :"+value );