Heim >Java >javaLernprogramm >Wie kann ich alle Maximalwerte aus einem Java-Stream abrufen?

Wie kann ich alle Maximalwerte aus einem Java-Stream abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-08 12:37:12555Durchsuche

How Can I Get All Maximum Values from a Java Stream?

Maximieren aller Werte in einem Java-Stream

Problem:
Die Max-Funktion von Java in Lambda-Ausdrücken und Streams gibt normalerweise ein beliebiges Element zurück, wenn Mehrere Kandidaten teilen sich den Maximalwert. Dies kann unerwünscht sein, wenn das gewünschte Verhalten darin besteht, alle Maximalwerte zurückzugeben.

Lösung:

Es gibt derzeit keine direkte Möglichkeit, dieses Verhalten zu erreichen, ohne explizit Teilergebnisse zu sammeln in einer Sammlung. Hier sind zwei mögliche Ansätze:

Zwei-Pass-Ansatz (Sammlung):

  1. Bestimmen Sie den Maximalwert mit mapToInt(String::length).max( ).
  2. Filtern Sie den Eingabestream, um alle Elemente zu erhalten, die dem Maximum entsprechen Länge.

Kollektorbasierter Ansatz (Einzeldurchgang):

  1. Erstellen Sie einen benutzerdefinierten Kollektor mit der maxList-Methode:

    static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
     // Implementation given in the reference answer
    }
  2. Verwenden Sie den Sammler, um alle Elemente mit dem maximalen Wert in einem einzigen zu sammeln bestanden.

Beispiel:

Verwendung des kollektorbasierten Ansatzes:

Stream<String> input = ... ;

List<String> result = input.collect(maxList(comparing(String::length)));

Dies gibt eine Liste zurück, die alle Zeichenfolgen mit enthält die maximale Länge im Eingabestream.

Das obige ist der detaillierte Inhalt vonWie kann ich alle Maximalwerte aus einem Java-Stream abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn