列表中 findAll 的 Groovy 过滤条件

标签 groovy findall

我尝试在列表上使用 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
        }

最佳答案

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

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 }

关于列表中 findAll 的 Groovy 过滤条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136616/

相关文章:

jenkins - 获取异常 'java.lang.IllegalStateException: There is no body to invoke'

mysql - Node Js (Sequelize) - 未处理的拒绝 SequelizeDatabaseError : Unknown column 'id' in 'field list'

Python Regex 为什么它不能找到所有双字?

gradle - 尝试遍历数组并将每个值传递给 gradle 任务

jenkins - @NonCPS 在第一个构建步骤后停止

eclipse - AntBuilder 可在 Groovy Console 中运行,但不能在 Eclipse 中运行

java - 使用 findAll 子树意外结束

python - 正则表达式 findall start() 和 end() ? Python

python - 除了所有输入数据之外,还将 re.findall() 输出到 CSV

jenkins - 如何通过在 jenkins 脚本控制台上编写 groovy 脚本来获取环境变量的值?