Renvoyer toutes les valeurs maximales à l'aide de la fonction Max dans les flux Java
Lors de l'utilisation de la fonction max dans les flux lambda de Java 8, des divergences peuvent apparaître dans les scénarios où plusieurs objets donnent la même valeur maximale. La fonction génère un représentant arbitraire sans évaluer ni prendre en compte tous les candidats viables.
Pour remédier à cette limitation, une méthode alternative est nécessaire pour récupérer toutes les valeurs maximales avec précision. Malheureusement, une approche simple n'est pas disponible, nécessitant l'utilisation d'une collection pour conserver des résultats partiels.
Solution en deux passes
Pour les entrées stockées dans une collection (Liste< String>), un processus en deux étapes peut être utilisé :
Solution à passage unique (flux)
Pour aborder le scénario à passage unique avec des flux, un collecteur personnalisé peut être construit sur la base du comparateur fourni :
static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) { return Collector.of( ArrayList::new, (list, t) -> { int c; if (list.isEmpty() || (c = comp.compare(t, list.get(0))) == 0) { list.add(t); } else if (c > 0) { list.clear(); list.add(t); } }, (list1, list2) -> { // Processing for list merging logic } ); }
Pour utiliser ce collecteur dans un flux, invoquez simplement collecter :
Stream<String> input = ... ; List<String> result = input.collect(maxList(comparing(String::length)));
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!