[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten

Überblick

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.

Korrespondenzkandidat

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.

Doppelte Entfernung mit RxJava

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

[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Ich möchte ein Objekt im CSV-Format mit mehrzeiligem Header und Filter in Java zurückgeben
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Ich möchte eine E-Mail in Java senden.
Ich möchte Java8 für jeden mit Index verwenden
rsync4j - Ich möchte rsync in Java berühren.
Ich möchte die Aggregationsverarbeitung mit Spring-Batch durchführen
Ich möchte den Wert in Ruby erhalten
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich möchte so etwas wie "cls" in Java machen
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte eine TraceId in das Protokoll einbetten
Ich möchte den Dunkelmodus mit der SWT-App verwenden
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich möchte den Pfad nach der neuen Registrierung ändern, nachdem ich mich mit mehreren Geräten angemeldet habe.
[Android Studio] Ich möchte Einschränkungen für die in EditText [Java] registrierten Werte festlegen.
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
Ich möchte mit Ruby (ABC177E) eine schnelle Primfaktorisierung durchführen.
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Ich möchte im gespeicherten Zustand zum selben Bildschirm wechseln
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Ich möchte den Startbefehl mit Docker-Compose an Postgres übergeben.
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Ich habe versucht, mit Java zu interagieren
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
In Java möchte ich mehrere angegebene Zeichen nur von Anfang bis Ende abschneiden.
Nachdem ich einen Artikel mit Rails Simple Calendar veröffentlicht habe, möchte ich ihn im Kalender wiedergeben.
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Ich möchte den Inhalt von Assets in der mit capistrano erstellten Umgebung von Grund auf neu erstellen
Ich möchte den oberen Rand in der UITableView von Grouped entfernen (schnell)
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
Ich möchte eine asynchrone Verarbeitung und periodische Ausführung mit Rail durchführen !!!
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Java-Referenz zum Verständnis in der Abbildung
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich habe das neue Yuan-Problem in Java ausprobiert
[Java] Ich möchte überprüfen, ob die Elemente in der Liste null oder leer sind. [Collection Utils]
So erhalten Sie das Datum mit Java
Ich möchte Java-Updates insgesamt stoppen
Ich möchte @Autowired in Servlet verwenden
Ich ging zum Java Women's Club # 1
[Ruby] Ich möchte nur das ungerade Zeichen in der Zeichenfolge ausgeben
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
[Hinweis] Ich möchte mit afterLast mit JdbcTemplate in umgekehrter Reihenfolge arbeiten
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
Ich möchte ein chinesisches (koreanisches) PDF mit dünnen Berichten anzeigen
Ich möchte Group By-Verarbeitung mit Stream durchführen (Group-by-Count, Group-by-Sum, Group-by-Max).
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen