列表中findAll上的Groovy筛选条件

列表中findAll上的Groovy筛选条件,groovy,findall,Groovy,Findall,我试图在列表中使用findAll构建动态过滤器。我有一个变量,只有在不为null时才需要包含在过滤器中 @Test void testSample(){ def list = [ new Employee(age:22, isManager:false), new Employee(age:23, isManager:true), new Employee(age:22, isMan

我试图在列表中使用findAll构建动态过滤器。我有一个变量,只有在不为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

    }
他们俩都提供了所有的记录。我是否可以在一个条件下实现这一点,而无需编写多个查询

看起来有些像下面(但这不起作用)


尝试使用闭包,而不是描述要执行的操作的字符串:

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
编辑 你是说:

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

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

这是可行的,但我正在寻找的是类似于动态构建查询的东西,因此最终我将只有一个查询要执行。类似于println list.findAll{if(var)it.age==var&&it.isManager==true}。但这不起作用。@KiranChitturi在问题中提到这一点可能很方便。。。也许可以编辑这个问题,并举例说明你想得到什么?@time_yates按照建议更新了我的问题。@KiranChitturi更新了答案。。。你的意思是这样吗?@时间确实如此。谢谢
println list.findAll{ ( var != null ? it.age == var : true ) && it.isManager == true }