Come verificare se l'elemento si trova in un array/hash/raccolta/elenco groovy?
Domanda
Come faccio a capire se un array contiene un elemento?Ho pensato che potesse esserci qualcosa del genere [1, 2, 3].includes(1)
che valuterebbe come true
.
Soluzione
.contains() è il metodo migliore per gli elenchi, ma per le mappe dovrai utilizzare .containsKey() o .containsValue()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
Altri suggerimenti
Un po' di zucchero sintattico
1 in [1,2,3]
Per gli elenchi, utilizzare contains
:
[1,2,3].contains(1) == true
Se vuoi davvero che il tuo metodo includes su un ArrayList, aggiungilo semplicemente:
ArrayList.metaClass.includes = { i -> i in delegate }
IMPORTANTE Gotcha per l'utilizzo di .contains() su una raccolta di oggetti, come i domini.Se la dichiarazione del dominio contiene un EqualsAndHashCode o qualche altra implementazione equals() per determinare se quegli Ojbect sono uguali e l'hai impostato in questo modo...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
quindi .contains(myObjectToCompareTo) valuterà i dati in myObjectToCompareTo con i dati per ciascuna istanza di Object nella Collection.Quindi, se il tuo metodo equals non è all'altezza, come non lo era il mio, potresti vedere risultati inaspettati.
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}
L'ho fatto in questo modo, quindi funziona se qualcuno lo sta cercando.