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
Mary-Kate OlsenOriginal
2024-12-28 11:15:14944Durchsuche

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));
}

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

persons.stream().filter(distinctByKey(Person::getName))

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!

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