代码之家  ›  专栏  ›  技术社区  ›  Alexey Sviridov

groovy findall闭包参数

  •  7
  • Alexey Sviridov  · 技术社区  · 15 年前

    我想用groovy findAll 用我的参数过滤关闭

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

    我现在怎么能把芬德尔的关闭称为?像下面这样?

    myColl = someColl.findAll(filterClosure ??? )
    
    1 回复  |  直到 8 年前
        1
  •  7
  •   John Wagenleitner    15 年前

    假设您的集合是一个列表,您可以使用curry用您的对象填充额外的闭包参数:

    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传递一个集合项。这对于一个地图集合不起作用,因为findall for它需要一个或两个参数的闭包。