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 }