加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在列表中的findAll上的Groovy过滤条件

发布时间:2020-12-14 16:38:16 所属栏目:大数据 来源:网络整理
导读:我试图使用列表中的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
我试图使用列表中的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

    }

他们都提供所有的记录。有没有办法我可以在一个条件下实现这一点,而不需要写多个查询?

看起来像下面(这不行)

println list.findAll{
                if(var) it.age == var &&
                it.isManager == true
        }

解决方法

尝试使用Closures而不是Strings描述你想要做什么:

def list = [ 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 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读