Bonjour tout le monde, j'ai besoin de votre aide.Voici mon besoin
Identification des voyages pour nettoyage dans une liste
Objectif : supprimer les doublons de FATS en prenant le voyage le plus ancien pour chaque FAT
Si un FAT a plusieurs voyages, on ne conservera que le voyage le plus ancien : on prendra le voyage qui est survenu sur la date de parcours la plus lointaine.
Il est possible qu’un FAT ait plusieurs voyages sur cette date de parcours la plus ancienne. A ce moment-là, on prendra le kilométrage voyages le plus faible. Si les kilométrages sont égaux, on n’en conservera qu’un seul incident.
FAT_1 01/01/2016 1000 A conserver FAT_1 02/02/2016 1500 Delete FAT_1 03/03/2016 2000 Delete FAT_2 01/01/2016 1000 A conserver FAT_2 01/01/2016 1010 Delete FAT_2 03/03/2016 2000 Delete FAT_3 01/01/2016 1000 A conserver FAT_3 01/01/2016 1000 Delete FAT_3 03/03/2016 2000 Delete
J'ai essayé avec distinctBy comme ceci :
en appelant cette fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t)); }
ça ne marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private List<VoyageBean> getVoyagesFails(@NonNull List<VoyageBean> voyagesInitList) { return voyagesInitList.stream() .filter(Utils.distinctByKey(VoyageBean::getFat)) .collect(Collectors.toList());
Merci par avance pour votre aide,
Partager