【问题标题】:Groovy dynamic query from String to findAll on a collection从 String 到集合上的 findAll 的 Groovy 动态查询
【发布时间】:2016-12-22 17:07:48
【问题描述】:
我有一个像这样接收字符串查询的应用
"age >= 21"
使用这个字符串参数我需要过滤一个集合。有什么办法可以用 Groovy findAll 或其他东西来做到这一点?我已经尝试过以下方法,但它只返回整个列表:
String query1 = "it.age >= 21"
println list.findAll { it -> query1 }
【问题讨论】:
标签:
groovy
collections
closures
【解决方案1】:
这应该做你想做的:
def list = [[age:20],[age:23],[age:19],[age:21]]
def query = "it.age >= 21"
def sh = new GroovyShell()
def closure = sh.evaluate("{it -> $query}")
println list.findAll(closure)
注意it -> 在这种情况下不是可选的,因为闭包需要知道它接受一个参数