Come verificare se l'elemento si trova in un array/hash/raccolta/elenco groovy?

StackOverflow https://stackoverflow.com/questions/51927

  •  09-06-2019
  •  | 
  •  

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top