Hamcrest l'égalité des collections
Est-il un comparateur de Hamcrest de comparer des collections pour l'égalité?
Il est contains
et containsInAnyOrder
mais j'ai besoin de equals
pas lié à béton type de collection.
E. g. Je ne peut pas comparer des Tableaux.asList et Carte.valeurs avec Hamcrest equals
.
Merci d'avance!
Voir aussi stackoverflow.com/q/2509293/21499
Arrays.asList().equals(new HashMap<>().values()) == false
List
s et Set
s ne sont jamais égaux les uns aux autres.OriginalL'auteur Andrey Minogin | 2009-12-25
Vous devez vous connecter pour publier un commentaire.
C'est à cause de hamcrest est trop zélés type de signatures. Vous peut faire cette comparaison d'égalité, mais vous avez besoin de jeter le
List
objet deCollection
avant, il va compiler.J'ai souvent à faire casting avec Hamcrest, qui se sent mal, mais c'est la seule façon de l'obtenir pour compiler parfois.
OriginalL'auteur skaffman
Casting pour une Collection peut fonctionner, mais il fait quelques hypothèses à propos de la Collection sous-jacente implémentations (par exemple, de l'ordre?). Une approche plus générale serait d'écrire votre propre matcher.
Voici presque au complet comparateur de mise en œuvre qui fait ce que vous voulez (vous aurez besoin de remplir les importations et les describeTo méthode). Notez que cette mise en œuvre exige que tous les éléments de deux collections pour être égaux, mais pas nécessairement dans le même ordre.
OriginalL'auteur Mark
Si vous avez des problèmes avec la méthode equals de la collections de mise en œuvre, vous pouvez également copier d'abord les collections:
Également les éléments suivants pourraient travailler:
OriginalL'auteur Hans-Peter Störr