Heim >Java >javaLernprogramm >Wie kann ich mithilfe von Streams eine Java 8-Sammlung nach der Eindeutigkeit einer bestimmten Eigenschaft filtern?
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!