Seit die Stream-Funktion in Java implementiert wurde, ist es möglich geworden, eine Deduplizierung (verschieden) von List durchzuführen. Wie im Artikel [Java 8] Stream zum doppelten Löschen (& doppelte Überprüfung) beschrieben, ermöglicht die Standardfunktion das doppelte Löschen nur unter Verwendung des Listenwerts. Wenn List ein Objekt ist, kann mit dem angegebenen Schlüssel im Objekt kein doppeltes Löschen durchgeführt werden. Dieses Mal werde ich also schreiben, wie eine doppelte Löschung mit dem angegebenen Schlüssel im Objekt realisiert wird.
Wie im Artikel Ausführen von Stream.distinct mit Feldeigenschaften usw. beschrieben, wird das doppelte Löschen durch Kombinieren von Filter und HashSet ohne Verwendung von eindeutigen Elementen realisiert. Wie es geht, wird vorgestellt. In dem Artikel Java 8 Distinct by property wird außerdem beschrieben, wie groupingBy verwendet wird, wie Wrapper-Klassen und Bibliotheken verwendet werden. Die Verwendung wird vorgestellt.
Es gibt verschiedene Methoden, und ich frage mich, welche in Ordnung ist, aber dieses Mal werde ich Ihnen zeigen, wie Sie die RxJava
-Bibliothek verwenden.
<Hinzugefügt am 13.11.2020> In dem Artikel Verwendung von Stream Java in Java8, der im Kommentar von @ Rui_K vorgestellt wurde, wird equals bei der internen Verarbeitung von Standard-Streams verwendet. Es scheint benutzt zu werden. Wenn Sie also dieselbe Beurteilungslogik in der Methode equals implementieren, kann anscheinend auch die Standardmethode verwendet werden.
Was ist RxJava? Wie im Artikel RxJava-Übersicht beschrieben, wurde eine Bibliothek entwickelt, um reaktive Programmierung zu realisieren. ist. Die eindeutige Methode wird in der von RxJava bereitgestellten Observable-Klasse bereitgestellt. Mit dieser Methode können Sie den zu duplizierenden Schlüssel angeben. Weitere Informationen finden Sie in dieser Dokumentation. Der Beispielcode lautet wie folgt. Hier wird eine doppelte Löschung unter Verwendung des E-Mail-Werts der Benutzerklasse durchgeführt.
sample.java
List<User> distinctUserRecords = Observable.fromStream(userRecords.stream())
.distinct(u -> u.getEmail()).toList().blockingGet();
Recommended Posts