sort property create collection array groovy

property - Groovy no está en la colección



groovy map to collection (5)

Creo que no hay una sintaxis bonita, desafortunadamente. Pero puedes usar una variable auxiliar para que sea más legible:

def isMagicChar = ch in [''a'', ''b'', ''c''] if (!isMagicChar) ...

O, en este caso, puedes usar un regex :)

if (ch !=~ /[abc]/) ...

La manera maravillosa de ver si algo está en una lista es usar "en"

if(''b'' in [''a'',''b'',''c''])

Sin embargo, ¿cómo ves muy bien si algo no está en una colección?

if(!(''g'' in [''a'',''b'',''c'']))

Parece desordenado y el "!" está oculto a la mirada casual. ¿Hay alguna manera más idiomática de hacer esto?

¡Gracias!


Más legible, no estoy seguro:

assert [''a'',''b'',''c''].any{it == ''b''} assert [''a'',''b'',''c''].every{it != ''g''}

Para tu ejemplo:

if ([''a'',''b'',''c''].every{it != ''g''})

Hace unos meses, ¡sugerí una nueva sobrecarga de operador! ( no operador) . Ahora, tal vez puedas usar cualquier cantidad impar de exclamaciones;)

if(!!!(''g'' in [''a'',''b'',''c'']))


Otra forma de escribirlo es con contains , por ejemplo

if (![''a'', ''b'', ''c''].contains(''b''))

Se ahorra el nivel adicional de paréntesis a costa de reemplazar al operador con una llamada a método.


Puede agregar nuevas funciones:

Object.metaClass.notIn = { Object collection -> !(delegate in collection) } assert "2".notIn([''1'', ''2q'', ''3'']) assert !"2".notIn([''1'', ''2'', ''3'']) assert 2.notIn([1, 3]) assert !2.notIn([1, 2, 3]) assert 2.notIn([1: ''a'', 3: ''b'']) assert !2.notIn([1: ''a'', 2: ''b''])


Según la documentación de Grails sobre la creación de criterios here , puedes usar algo como esto:

not {''in''("age",[18..65])}

En este ejemplo, tiene una propiedad llamada "age" y desea obtener filas que NO están entre 18 y 65. Por supuesto, la parte [18..65] se puede sustituir con cualquier lista de valores o rango que necesite.