áreas varios trabajo seleccionan requieren personalizado para otra opción necesarias los las identificadas hoja filtros filtro ejercicios donde criterios copiar condiciones con comodines como avanzados avanzado groovy findall

groovy - varios - la opción donde se seleccionan las condiciones del filtro avanzado necesarias es



Criterios de filtro Groovy en findTodo en una lista (1)

Intento crear filtros dinámicos utilizando findAll en una lista. Tengo una variable que debe incluirse en el filtro solo si no es nulo.

@Test void testSample(){ def list = [ new Employee(age:22, isManager:false), new Employee(age:23, isManager:true), new Employee(age:22, isManager:true) ] as Set def var = 22; String query1 = "it.age == var && it.isManager == true " String query2 = "it.isManager == true" println list println list.findAll { var ? query1 : query2 } // Should give 1 record age = 22 and manager var = null; println list.findAll { var ? query1 : query2 } // should give 2 records-only manager }

Ambos dando todos los registros. ¿Hay alguna forma de que pueda lograr esto en una condición sin necesidad de escribir preguntas múltiples?

Mirando algo como a continuación (aunque esto no funciona)

println list.findAll{ if(var) it.age == var && it.isManager == true }


Pruebe con Closures en lugar de cadenas que describan lo que quiere hacer:

def list = [ new Employee(age:22, isManager:false), new Employee(age:23, isManager:true), new Employee(age:22, isManager:true) ] as Set def var = 22; Closure query1 = { it.age == var && it.isManager == true } Closure query2 = { it.isManager == true } println list println list.findAll( var ? query1 : query2 ) // Should give 1 record age = 22 and manager var = null; println list.findAll( var ? query1 : query2 ) // should give 2 records-only manager

Editar

Quieres decir:

println list.findAll{ ( var ? it.age == var : true ) && it.isManager == true }

O mejor:

println list.findAll{ ( var != null ? it.age == var : true ) && it.isManager == true }