在列表闭包中获取“调用”列表大小

时间:2015-07-07 20:57:21

标签: groovy

我需要在Groovy列表闭包中获取“调用”列表大小,例如:

def foo = [1,2,3,4,5]
def bar = foo.findAll {
   someCondition(it)
}.collect {
   processElement(it, <self>.size())
}

其中<self>是使用foo过滤findAll所产生的列表。

当然,可以保存中间结果并获得它的大小,但是没有它可以吗?

1 个答案:

答案 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

但这只是使用委托作为中间结果; - )