In Java 8 kann die Max-Funktion für Lambda und Streams verwendet werden, um den Maximalwert in einem Datensatz zu identifizieren . Wenn jedoch mehrere Elemente denselben Maximalwert haben, wählt Max willkürlich eines davon aus und gibt es zurück.
Erwartetes Verhalten:
Das Ziel besteht darin, eine Liste aller Elemente abzurufen Elemente, die den Maximalwert gemeinsam haben, nicht nur einen einzelnen Vertreter.
Lösung:
Da der API eine explizite Methode für diese Funktionalität fehlt, können Sie eine benutzerdefinierte Lösung mithilfe von Zwischenspeicherung und Sammlungsmanipulation implementieren. Hier sind zwei Ansätze:
1. Zwei-Pass-Lösung (für Sammlungen):
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. Single-Pass-Lösung (für Streams):
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)));
Dieser benutzerdefinierte Collector verfolgt Zwischenergebnisse und aktualisiert seinen Status basierend auf dem Wert jedes Elements im Vergleich zum aktuellen Maximum. Durch die Nutzung dieses Ansatzes können Sie eine Liste mit allen Maximalwerten aus Ihrem Stream oder Ihrer Sammlung erhalten.
Das obige ist der detaillierte Inhalt vonWie finde ich alle Maximalwerte in einem Java-Stream?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!