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.
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.
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