在列表上查找全部的Groovy过滤条件 [英] Groovy filter criteria on findAll on a list
本文介绍了在列表上查找全部的Groovy过滤条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图在列表中使用findAll构建动态过滤器。我有一个变量,只有在不为空时才需要包含在过滤器中。
@Test
void testSample(){
def list = [new Employee(age:22, isManager:false),
新员工(年龄:23,isManager:true),
新员工(年龄:22,isManager:true)]设为
def var = 22;
String query1 =it.age == var& it.isManager == true
String query2 =it.isManager == true
println list
println list.findAll {var? query1:query2} //应该给1个记录年龄= 22和经理
var = null;
println list.findAll {var? query1:query2} //应该给2个记录专用管理器
}
他们都给出了所有的记录。无论如何,我可以在一种情况下实现这一点,而无需编写多元查询?
看起来像下面这样(但这不起作用)
println list.findAll {
if(var)it.age == var&&
it.isManager == true
}
解决方案
def list = [new Employee(age: 22,isManager:false),
新员工(年龄:23,isManager:true),
新员工(年龄:22,isManager:true)]设置
def var = 22;
Closure query1 = {it.age == var&& it.isManager == true}
Closure query2 = {it.isManager == true}
println list
println list.findAll(var?query1:query2)//应该给1个记录年龄= 22和经理
var = null;
println list.findAll(var?query1:query2)//应该给2个只记录管理器
编辑
您的意思是:
println list。 findAll {(var?it.age == var:true)&& it.isManager == true}
或者更好:
println list.findAll {(var!= null?it.age == var:true)&& it.isManager == true}
I trying to build dynamic filters using findAll on a list. I have a variable that needs to be included in the filter only if not null.
@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
}
Both of them giving all the records. Is there anyway I can achieve this in one condition without need to write muiltiple queries ?
Looking some like below (this doesn't work though)
println list.findAll{
if(var) it.age == var &&
it.isManager == true
}
解决方案
Try with Closures rather than Strings describing what you want to do:
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
Edit
Do you mean:
println list.findAll{ ( var ? it.age == var : true ) && it.isManager == true }
Or better:
println list.findAll{ ( var != null ? it.age == var : true ) && it.isManager == true }
这篇关于在列表上查找全部的Groovy过滤条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文