Comparez deux listes pour les mises à jour, les suppressions et les ajouts
Question Simple.
J'ai une nouvelle liste et une vieille liste. En Java, il y a un moyen standard/bibliothèque qui me permet de comparer ces deux listes et de déterminer les éléments qui ont été mis à jour, supprimé ou sont complètement nouvelle? E. g. Je devrais retrouver avec trois listes - éléments Supprimés (les éléments anciens, mais pas dans les nouvelles), la mise à Jour des éléments (les éléments à la fois), de Nouveaux objets (les éléments nouveaux et pas dans le vieux).
J'ai pu écrire moi-même mais je me demandais si il existe un moyen standard pour le faire.
Les objets de la liste d'implémenter equals correctement.
source d'informationauteur Pablojim
Vous devez vous connecter pour publier un commentaire.
Pas de manière standard désolé. Vous pouvez le faire assez facilement avec le JDK standard sans avoir recours à l'ajout d'une dépendance sur Apache Commons (comme d'autres l'ont suggéré). En supposant que vos listes sont
List<T>
instances:Il n'y a rien dans les bibliothèques standard.
Cependant, l'Apache Commons CollectionUtils classe vous donne cette fonctionnalité à l'intersection et de soustraire des méthodes:
(Vous avez besoin de l' (case non cochée) jette parce que CollectionUtils n'est pas generified.)
Je voudrais utiliser Apache CollectionUtils et l'utilisation de l'union (les éléments à la fois) et la disjonction des fonctions (changement de l'ordre pour obtenir l'un ou l'autre).
Idéalement vous pouviez faire passer tous les éléments au lieu de 3, mais si ce n'est pas le goulot d'étranglement, je ne serais pas s'inquiéter à propos de l'efficacité de la droite maintenant.
Personnellement, je crois que la seule façon sensée pour expliquer la différence entre les deux listes est avec un véritable algorithme de comparaison (comme celle de l'unix commande diff).
Jeux decependant, sont beaucoup plus simple dans l'histoire. Google Collections fournit un Les ensembles.différence(Jeu, Set) méthode, ainsi que l'union et l'intersection.
Je pense que vous pouvez accomplir cela avec le standard java bibliothèque de trop. Jetez un oeil à la suite des méthodes de java.util.Collection:
retainAll(Collection c)
removeAll(Collection c)
Si il y a une façon standard, je ne sais pas...
J'ai regardé Collections mais seulement vu disjoints() (qui est déjà une information...) et indexOfSubList() (pas sûr si c'est utile à tous).
J'ai également regardé Google Collections et si il n'y a, apparemment, pas de telles installations, il y a quelques outils utiles, comme Collections2's filter() fonction qui peut vous aider si vous faites une bonne Prédicat.
[EDIT] j'ai raté le removeAll et retainAll méthodes de Collecte... je ne supprimez pas cette réponse, même si c'est un peu pathétique, comme c'est en quelque sorte complémentaire des autres réponses... (je pense que Google Collections est au moins la peine de mentionner!)