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

Wie finde ich alle Maximalwerte in einem Java-Stream?

Barbara Streisand
Freigeben: 2024-12-07 19:06:21
Original
428 Leute haben es durchsucht

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());
Nach dem Login kopieren

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)));
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage