Comment vérifier si un élément dans groovy array / hash / collection / list?
127
Comment déterminer si un tableau contient un élément? J'ai pensé qu'il pourrait y avoir quelque chose comme [1, 2, 3].includes(1)qui évaluerait comme true.
Et, en plus, pour vérifier si une carte contient une valeur non nulle sous une certaine clé, il suffit de vérifier l'expression suivante if(aMap["aKey"]==aValue).
Vous vouliez probablement dire [1,2,3] .contains (1). Parce que je suppose que contient la fonction elle-même renvoie déjà un booléen. Pourquoi voulez-vous le comparer à nouveau avec un «vrai» codé en dur.
Harshay Buradkar
6
@HarshayBuradkar Pour être vraiment sûr true == true, bien sûr #joke
Automatico
8
Si vous voulez vraiment votre méthode includes sur une ArrayList, ajoutez-la simplement:
ArrayList.metaClass.includes ={ i -> i indelegate}
IMPORTANT Gotcha pour utiliser .contains () sur une collection d'objets, tels que les domaines. Si la déclaration de domaine contient un EqualsAndHashCode, ou une autre implémentation equals () pour déterminer si ces Ojbects sont égaux, et que vous l'avez défini comme ceci ...
puis le .contains (myObjectToCompareTo) évaluera les données de myObjectToCompareTo avec les données de chaque instance Object de la collection. Donc, si votre méthode d'égalité n'est pas à la hauteur, comme la mienne ne l'était pas, vous pourriez voir des résultats inattendus.
assert [12,42,33].indexOf(42) == 1
Réponses:
.contains () est la meilleure méthode pour les listes, mais pour les cartes, vous devrez utiliser .containsKey () ou .containsValue ()
la source
if(aMap["aKey"]==aValue)
.Un peu de sucre de syntaxe
la source
def m = [a: true]; 'a' in m
→ vrai encoredef m = [a: false]; 'a' in m
→ faux!Pour les listes, utilisez
contains
:la source
true == true
, bien sûr #jokeSi vous voulez vraiment votre méthode includes sur une ArrayList, ajoutez-la simplement:
la source
IMPORTANT Gotcha pour utiliser .contains () sur une collection d'objets, tels que les domaines. Si la déclaration de domaine contient un EqualsAndHashCode, ou une autre implémentation equals () pour déterminer si ces Ojbects sont égaux, et que vous l'avez défini comme ceci ...
puis le .contains (myObjectToCompareTo) évaluera les données de myObjectToCompareTo avec les données de chaque instance Object de la collection. Donc, si votre méthode d'égalité n'est pas à la hauteur, comme la mienne ne l'était pas, vous pourriez voir des résultats inattendus.
la source
Je l'ai fait comme ça, donc ça marche si quelqu'un le cherche.
la source
Vous pouvez utiliser l'opérateur Membership:
Opérateur d'adhésion Groovy
la source
Vous pouvez également utiliser des correspondances avec une expression régulière comme celle-ci:
la source