我需要在Groovy列表闭包中获取“调用”列表大小,例如:
def foo = [1,2,3,4,5]
def bar = foo.findAll {
someCondition(it)
}.collect {
processElement(it, <self>.size())
}
其中<self>
是使用foo
过滤findAll
所产生的列表。
当然,可以保存中间结果并获得它的大小,但是没有它可以吗?
答案 0 :(得分:1)
我目前能想到的最好的是:
def bar = foo.findAll { someCondition(it) }
.with { list ->
list.collect { processElement(it, list.size()) }
}
但这只是使用with
而不是中间结果。
或者,您可以使用Closure的委托:
def foo = [1,2,3,4,5]
def collector = { it -> processElement(it, delegate.size()) }
(collector.delegate = foo.findAll { someCondition(it) }).collect collector
但这只是使用委托作为中间结果; - )