使用Groovy 2.0
是否可以使用GPath属性表达式来使用谓词进行过滤:
class HandShaker {
String title
}
class AussieGreeter implements Greeter {
String name
List<HandShaker> handshaker
....
}
AussieGreeter greeter = new AussieGreeter()
greeter.setName("hello")
greeter.setHandshaker([new Handshaker().setTitle("butler")].asList()])
println Eval.x(greeter,"x[name=='hello'].handshaker[0].title")如果name属性等于"hello“,是否过滤欢迎?我还没有见过像这样的例子,Groovy和MissingPropertyException。
发布于 2012-07-02 16:27:44
我认为你需要做的是:
println Eval.x(greeter,"x.find { it.name == 'hello' }.handshaker[0].title")您可以修改AussieGreeter的getAt方法以获取闭包,如果元素返回true或null,则返回元素,否则如下所示:
class HandShaker {
String title
}
interface Greeter {}
class AussieGreeter implements Greeter {
String name
List<HandShaker> handshaker
def getAt( Closure o ) {
o.delegate = this
o.resolveStrategy = Closure.DELEGATE_FIRST
o() ? this : null
}
}
AussieGreeter greeter = new AussieGreeter( name:'hello',
handshaker:[new HandShaker( title:'butler' )] )
greeter[ { name == 'hello' } ]?.handshaker[0].title它更接近您的原始需求(但是比较前后有大括号,方括号后面有一个? )
但是find更容易阅读,imho :-/
https://stackoverflow.com/questions/11289133
复制相似问题