Heim >Java >javaLernprogramm >Wie finde ich alle Maximalwerte in einem Java-Stream?

Wie finde ich alle Maximalwerte in einem Java-Stream?

Barbara Streisand
Barbara StreisandOriginal
2024-12-07 19:06:21427Durchsuche

How to Find All Maximum Values in a Java Stream?

So rufen Sie alle Maximalwerte in einem Java-Stream ab

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):

  • Finden Sie den Maximalwert mit „max“ und speichern Sie ihn.
  • Filtern Sie die Sammlung so, dass sie nur Elemente enthält, die mit dem Maximalwert übereinstimmen.
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):

  • Verwenden Sie einen benutzerdefinierten Collector, der während der Stream-Verarbeitung eine Liste aller Elemente mit dem aktuellen Maximalwert verwaltet.
  • Gesammelte Elemente zurückgeben als Ergebnis auflisten.
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!

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