[Java] Je veux effectuer distinctement avec la clé dans l'objet

Aperçu

Depuis que la fonction Stream a été implémentée en Java, il est devenu possible d'effectuer une déduplication (distincte) de List. Cependant, comme décrit dans l'article [Java 8] Stream for duplicate deletion (& duplicate check), la fonction standard permet la suppression de doublons en utilisant uniquement la valeur List. Lorsque List est un objet, la suppression des doublons ne peut pas être effectuée avec la clé spécifiée dans l'objet. Donc, cette fois, j'écrirai comment réaliser la suppression des doublons avec la clé spécifiée dans l'objet.

Candidat par correspondance

Comme décrit dans l'article Comment effectuer Stream.distinct avec les propriétés de champ, etc., la suppression des doublons est réalisée en combinant le filtre et le HashSet sans utiliser distinct. Comment le faire est présenté. De plus, dans l'article Java 8 Distinct by property, comment utiliser groupingBy, comment Wrapper les classes et les bibliothèques sont décrits. Comment utiliser est présenté. Il existe différentes méthodes, et je me demande laquelle est correcte, mais cette fois je vais vous montrer comment utiliser la bibliothèque RxJava.

<Ajouté le 13/11/2020> Dans l'article Comment utiliser Stream distinct en Java8 introduit dans le commentaire de @ Rui_K, equals est utilisé dans le traitement interne de distinct de Stream standard. Il semble être utilisé. Donc, si vous implémentez la même logique de jugement dans la méthode equals, il semble que la méthode standard puisse également être utilisée.

Suppression des doublons à l'aide de RxJava

Qu'est-ce que RxJava? Comme présenté dans l'article RxJava-Overview, une bibliothèque développée pour réaliser une programmation réactive. est. La méthode distincte est fournie dans la classe Observable fournie par RxJava, et cette méthode vous permet de spécifier la clé à dupliquer. Veuillez vous référer à cette Documentation. L'exemple de code est le suivant. Ici, la suppression des doublons est effectuée à l'aide de la valeur e-mail de la classe User.

sample.java


List<User> distinctUserRecords = Observable.fromStream(userRecords.stream())
    .distinct(u -> u.getEmail()).toList().blockingGet();

Recommended Posts

[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
Je souhaite renvoyer un objet au format CSV avec en-tête et filtre multilignes en Java
Je veux revenir à l'écran précédent avec kotlin et java!
Je souhaite envoyer un e-mail en Java.
Je veux utiliser java8 forEach avec index
rsync4j --Je veux toucher rsync en Java.
Je souhaite effectuer un traitement d'agrégation avec spring-batch
Je veux obtenir la valeur en Ruby
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Je veux ForEach un tableau avec une expression Lambda en Java
Je veux faire quelque chose comme "cls" en Java
[Java] Je souhaite calculer la différence par rapport à la date
Je veux intégrer n'importe quel TraceId dans le journal
Je souhaite utiliser le mode sombre avec l'application SWT
Je veux faire des transitions d'écran avec kotlin et java!
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
Je souhaite modifier le chemin après une nouvelle inscription après m'être connecté avec plusieurs appareils.
[Android Studio] Je souhaite définir des restrictions sur les valeurs enregistrées dans EditText [Java]
# 1_JAVA Je veux obtenir le numéro d'index en spécifiant un caractère dans la chaîne de caractères
Je souhaite effectuer une factorisation prime rapide avec Ruby (ABC177E)
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
Je souhaite passer au même écran dans l'état enregistré
Je veux implémenter diverses fonctions avec kotlin et java!
Je veux passer la commande de démarrage à postgres avec docker-compose.
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
J'ai essayé d'interagir avec Java
Même si je souhaite convertir le contenu d'un objet de données en JSON en Java, il existe une référence circulaire ...
En Java, je souhaite couper plusieurs caractères spécifiés uniquement du début et de la fin.
Après avoir publié un article avec Rails Simple Calendar, je souhaite le refléter dans le calendrier.
Je veux renvoyer un type différent de l'élément d'entrée avec Java8 StreamAPI Reduce ()
Je veux recréer le contenu des actifs à partir de zéro dans l'environnement construit avec capistrano
Je veux supprimer la marge supérieure dans UITableView de Grouped (swift)
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Je souhaite effectuer un traitement asynchrone et une exécution périodique avec Rail !!!
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Référence Java à comprendre dans la figure
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
J'ai essayé le nouveau yuan à Java
[Java] Je veux vérifier que les éléments de la liste sont nuls ou vides [Collection Utils]
Comment obtenir la date avec Java
Je veux arrêter complètement les mises à jour Java
Je veux utiliser @Autowired dans Servlet
Je suis allé au Java Women's Club # 1
[Ruby] Je souhaite afficher uniquement le caractère impair dans la chaîne de caractères
Je veux afficher des images avec REST Controller de Java et Spring!
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
(Limité à Java 7 ou version ultérieure) Je souhaite que vous compariez des objets dans Objects.equals
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
[Note] Je veux obtenir dans l'ordre inverse en utilisant afterLast avec JdbcTemplate
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je souhaite effectuer un traitement Group By avec Stream (group-by-count, group-by-sum, group-by-max)
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données