我想在参数中使用groovy findAll来过滤闭包

filterClosure = { it, param ->
  it.getParam == param
}


现在如何在findAll中调用此闭包?像下面吗?

myColl = someColl.findAll(filterClosure ??? )

最佳答案

假设您的收藏是一个列表,则可以使用curry在对象中填充额外的closure参数:

def someColl = ["foo", "bar", "foo", "baz", "foo"]

def filterClosure = { it, param -> it.getParam == param }

myColl = someColl.findAll(filterClosure.curry([getParam:'foo']))

assert ["foo", "foo", "foo"] == myColl


在上面的代码中,将为filterClosure“ it”分配传递给curry的参数,并将“ param”传递给findAll一个收集项。这对于Map集合将不起作用,因为findAll会使用带有一个或两个参数的闭包。

07-28 02:59
查看更多