Como verificar se o elemento está em uma matriz/hash/coleção/lista bacana?
Pergunta
Como posso descobrir se um array contém um elemento?Eu pensei que poderia haver algo como [1, 2, 3].includes(1)
que avaliaria como true
.
Solução
.contains() é o melhor método para listas, mas para mapas você precisará usar .containsKey() ou .containsValue()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
Outras dicas
Um pouco de açúcar de sintaxe
1 in [1,2,3]
Para listas, use contains
:
[1,2,3].contains(1) == true
Se você realmente deseja seu método include em um ArrayList, basta adicioná-lo:
ArrayList.metaClass.includes = { i -> i in delegate }
IMPORTANTE Peguei por usar .contains() em uma coleção de objetos, como domínios.Se a declaração de Domínio contém um EqualsAndHashCode, ou alguma outra implementação equals() para determinar se esses Ojbects são iguais, e você definiu assim...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
então .contains(myObjectToCompareTo) avaliará os dados em myObjectToCompareTo com os dados de cada instância de objeto na coleção.Portanto, se o seu método equals não for adequado, como o meu não foi, você poderá ver resultados inesperados.
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}
Eu fiz assim para que funcione se alguém estiver procurando.