J'ai une liste de Integer
list
et de la list.stream()
je veux la valeur maximale. Quel est le moyen le plus simple? Ai-je besoin d'un comparateur?
Vous pouvez soit convertir le flux en IntStream
:
OptionalInt max = list.stream().mapToInt(Integer::intValue).max();
Ou spécifiez le comparateur d'ordre naturel:
Optional<Integer> max = list.stream().max(Comparator.naturalOrder());
Ou utilisez réduire l'opération:
Optional<Integer> max = list.stream().reduce(Integer::max);
Ou utilisez collector:
Optional<Integer> max = list.stream().collect(Collectors.maxBy(Comparator.naturalOrder()));
Ou utilisez 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));
Une autre version pourrait être:
int maxUsingCollectorsReduce = list.stream().collect(Collectors.reducing(Integer::max)).get();
Code correct:
int max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));
ou
int max = list.stream().reduce(Integer.MIN_VALUE, Integer::max);
Avec flux et réduire
Optional<Integer> max = list.stream().reduce(Math::max);
Vous pouvez également utiliser l'extrait de code ci-dessous:
int max = list.stream().max(Comparator.comparing(Integer::valueOf)).get();
Une autre alternative:
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 );