У меня есть список Integer
list
, а из list.stream()
требуется максимальное значение. Каков самый простой способ? Мне нужен компаратор?
Как найти максимальное значение из целого, используя поток в java 8?
Ответ 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)); работает как для положительных, так и для отрицательных чисел