Подтвердить что ты не робот

Как найти максимальное значение из целого, используя поток в java 8?

У меня есть список Integer list, а из list.stream() требуется максимальное значение. Каков самый простой способ? Мне нужен компаратор?

4b9b3361

Ответ 1

Вы можете преобразовать поток в 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();

Ответ 2

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

Ответ 3

Другая версия может быть:

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

Ответ 4

Правильный код:

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

или

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

Ответ 5

С потоком и уменьшением

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

Ответ 6

Вы также можете использовать приведенный ниже код:

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

Другая альтернатива:

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

Ответ 7

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

Ответ 8

Вы можете использовать int max = Stream.of(1,2,3,4,5).reduce(0, (a, b) → Math.max(a, b)); работает как для положительных, так и для отрицательных чисел