如何使用 Java8中的流从 Integer 中找到最大值?

我有一个 Integer list的列表,从 list.stream()我想要的最大值。

最简单的方法是什么? 我需要比较器吗?

108071 次浏览

您可以将流转换为 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 max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));

另一个版本可能是:

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

可以使用 int max = Stream.of (1,2,3,4,5) . reduce (0,(a,b)-> Math.max (a,b)) ; 对正数和负数都有效

随着流和减少

Optional<Integer> max = list.stream().reduce(Math::max);

你也可以使用下面的代码:

int max = list.stream().max(Comparator.comparing(Integer::valueOf)).get();

另一种选择:

list.sort(Comparator.reverseOrder()); // max value will come first
int max = list.get(0);
int value = list.stream().max(Integer::compareTo).get();
System.out.println("value  :"+value );