如何在java 8中使用流从Integer中找到最大值?

时间:2015-07-13 08:10:48

标签: java-8 java-stream

我有一个Integer list的列表,并且list.stream()我想要最大值。什么是最简单的方法?我需要比较器吗?

8 个答案:

答案 0 :(得分:168)

您可以将流转换为IntStream

OptionalInt max = list.stream().mapToInt(Integer::intValue).max();

或指定自然顺序比较器:

Optional<Integer> max = list.stream().max(Comparator.naturalOrder());

或使用reduce操作:

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

答案 1 :(得分:9)

int max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));

答案 2 :(得分:3)

另一个版本可能是:

int maxUsingCollectorsReduce = list.stream().collect(Collectors.reducing(Integer::max)).get();

答案 3 :(得分:2)

正确的代码:

int max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));

int max = list.stream().reduce(Integer.MIN_VALUE, Integer::max);

答案 4 :(得分:1)

使用流和减少

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

答案 5 :(得分:0)

您还可以使用以下代码段:

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

另一种选择:

list.sort(Comparator.reverseOrder()); // max value will come first
int max = list.get(0);  

答案 6 :(得分:0)

int value = list.stream().max(Integer::compareTo).get();
System.out.println("value  :"+value );

答案 7 :(得分:-2)

你可以使用int max = Stream.of(1,2,3,4,5).reduce(0,(a,b) - &gt; Math.max(a,b)); 适用于正数和负数