Maison >Java >javaDidacticiel >Comment trouver toutes les valeurs maximales dans un flux Java ?
Dans Java 8, la fonction max peut être utilisée sur lambda et les flux pour identifier la valeur maximale dans un ensemble de données . Cependant, lorsque plusieurs éléments ont la même valeur maximale, max choisit et renvoie arbitrairement l'un d'entre eux.
Comportement attendu :
Le but est de récupérer une liste de tous éléments qui partagent la valeur maximale, pas seulement un seul représentant.
Solution :
Étant donné que l'API ne dispose pas d'une méthode explicite pour cette fonctionnalité, vous pouvez implémenter une solution personnalisée utilisant le stockage intermédiaire et la manipulation de collection. Voici deux approches :
1. Solution en deux passes (pour les collections) :
List<String> list = ... ; int longest = list.stream() .mapToInt(String::length) .max() .orElse(-1); List<String> result = list.stream() .filter(s -> s.length() == longest) .collect(toList());
2. Solution à passage unique (pour les flux) :
static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) { // Implementation goes here (provided in the original response) } Stream<String> input = ... ; List<String> result = input.collect(maxList(comparing(String::length)));
Ce collecteur personnalisé suit les résultats intermédiaires et met à jour son état en fonction de la valeur de chaque élément par rapport à l'actuel. maximum. En tirant parti de cette approche, vous pouvez obtenir une liste contenant toutes les valeurs maximales de votre flux ou collection.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!