web-dev-qa-db-fra.com

Comment trouver la valeur maximale d'un entier utilisant stream dans Java 8?

J'ai une liste de Integerlist et de la list.stream() je veux la valeur maximale. Quel est le moyen le plus simple? Ai-je besoin d'un comparateur?

79
pcbabu

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();
177
Tagir Valeev
int max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));
9
Gripper

Une autre version pourrait être:

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

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

Avec flux et réduire

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

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);  
0
Vaseph
int value = list.stream().max(Integer::compareTo).get();
System.out.println("value  :"+value );
0
Shalika