Heim >Java >javaLernprogramm >Wie kann ich alle Maximalwerte aus einem Java-Stream abrufen?
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):
Kollektorbasierter Ansatz (Einzeldurchgang):
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 }
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!