我试图使用findAll在一个列表上构建动态过滤器。如果变量不为空,需要将其包含在过滤器中。
@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
}
他们两个都提供所有记录。有没有一种方法可以在一个条件下实现这一点,而不需要编写多个查询?
看起来应该像下面这样(尽管这并不起作用)
println list.findAll{
if(var) it.age == var &&
it.isManager == true
}
var == null
,这样0
或''
就不会让你出错了。 - tim_yates