Heim > Java > javaLernprogramm > Wie kann ich mithilfe von Streams eine Java 8-Sammlung nach der Eindeutigkeit einer bestimmten Eigenschaft filtern?

Wie kann ich mithilfe von Streams eine Java 8-Sammlung nach der Eindeutigkeit einer bestimmten Eigenschaft filtern?

Mary-Kate Olsen
Freigeben: 2024-12-28 11:15:14
Original
964 Leute haben es durchsucht

How Can I Filter a Java 8 Collection by a Specific Property's Distinctness Using Streams?

Java 8: Filtern von Sammlungen mit der Stream-API basierend auf der Eigenschaftsunterscheidbarkeit

In Java 8 wird häufig die Methode „distinct()“ zum Entfernen verwendet Duplikate von Elementen aus einem Stream. Allerdings werden Objekte standardmäßig als gleich betrachtet, wenn sie gemäß der Standardgleichheitsprüfung gleich sind. Für Fälle, in denen die Unterscheidbarkeit anhand einer bestimmten Eigenschaft bestimmt werden soll, ist ein ausgefeilterer Ansatz erforderlich.

Eine Lösung ohne Änderung der Person-Klasse besteht darin, die Methode „distinctByKey()“ zu verwenden, die wie folgt implementiert werden kann:

public static <T> Predicate<T> distinctByKey(Function<T, ?> keyExtractor) {
    Set<Object> seen = ConcurrentHashMap.newKeySet();
    return t -> seen.add(keyExtractor.apply(t));
}
Nach dem Login kopieren

Um eine Sammlung von Personenobjekten anhand ihrer Namen mit dieser Methode zu filtern, können wir schreiben:

persons.stream().filter(distinctByKey(Person::getName))
Nach dem Login kopieren

Dieser Ansatz verwendet einen zustandsbehafteten Filter, um den Überblick zu behalten zuvor gesehener Schlüsselwerte, um sicherzustellen, dass nur das erste Vorkommen jedes eindeutigen Namens erhalten bleibt. Es ist wichtig zu beachten, dass im Fall der Parallelverarbeitung die Methode „distinctByKey()“ im Gegensatz zur Standardmethode „distinct()“ möglicherweise nicht die Reihenfolge eindeutiger Elemente garantiert.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Streams eine Java 8-Sammlung nach der Eindeutigkeit einer bestimmten Eigenschaft filtern?. 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