Maison >Java >javaDidacticiel >Comment trouver toutes les valeurs maximales dans un flux Java ?

Comment trouver toutes les valeurs maximales dans un flux Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 19:06:21431parcourir

How to Find All Maximum Values in a Java Stream?

Comment récupérer 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) :

  • Trouvez la valeur maximale en utilisant max et stockez-la.
  • Filtrez la collection pour inclure uniquement les éléments qui correspondent à la valeur maximale.
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) :

  • Employer un collecteur personnalisé qui conserve une liste de tous les éléments avec la valeur maximale actuelle pendant le traitement du flux.
  • Renvoyer les éléments collectés liste comme résultat.
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn