Cómo comprobar si el elemento en groovy array / hash / colección / lista?


¿Cómo puedo averiguar si un array contiene un elemento? Pensé que podría haber algo como [1, 2, 3].includes(1) que evaluaría como true.

Author: Opal, 2008-09-09

6 answers

.contains () es el mejor método para las listas, pero para los mapas tendrá que utilizar .containsKey () or .containsValue ()

[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
 108
Author: shemnon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 20:44:19

Un poco de azúcar de sintaxis

1 in [1,2,3]
 209
Author: dahernan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-08 14:33:23

Para las listas, use contains:

[1,2,3].contains(1) == true
 37
Author: banderson623,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 15:26:40

Si realmente desea su método includes en una ArrayList, simplemente agréguelo:

ArrayList.metaClass.includes = { i -> i in delegate }
 6
Author: John Flinchbaugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-02 18:35:56

IMPORTANTE Gotcha para usar .contiene () en una Colección de Objetos, como Dominios. Si la declaración de dominio contiene un EqualsAndHashCode, o alguna otra implementación de equals () para determinar si esos Ojbects son iguales, y lo has establecido así...

import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")

Entonces el .contains (myObjectToCompareTo) evaluará los datos de myObjectToCompareTo con los datos de cada instancia de Objeto de la Colección. Por lo tanto, si su método igual no está a la altura, como el mío no lo estaba, puede ver resultados inesperados.

 3
Author: Twelve24,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-31 18:20:33
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}

Lo hice así para que funcione si alguien lo está buscando.

 1
Author: HinataXV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-08 17:10:48