Problème :
La fonction max de Java dans les expressions et les flux lambda renvoie généralement un élément arbitraire lorsque plusieurs candidats sont à égalité pour la valeur maximale. Cela peut être indésirable lorsque le comportement souhaité est de renvoyer toutes les valeurs maximales.
Solution :
Il n'existe actuellement aucun moyen direct d'obtenir ce comportement sans collecter explicitement des résultats partiels. dans une collection. Voici deux approches possibles :
Approche en deux passes (Collection) :
Approche basée sur un collecteur (passe unique) :
Créez un collecteur personnalisé à l'aide de la méthode maxList :
static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) { // Implementation given in the reference answer }
Exemple :
Utilisation de l'approche basée sur le collecteur :
Stream<String> input = ... ; List<String> result = input.collect(maxList(comparing(String::length)));
Cela renverra une liste contenant toutes les chaînes avec la longueur maximale dans le flux d'entrée.
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!