2009-09-07 13 views
7

Tôi muốn sử dụng groovy findAll với param của tôi để lọc đóng cửaGroovy FindAll thông số đóng cửa

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

Làm thế nào tôi bây giờ có thể gọi đóng cửa này trong FindAll? Như dưới đây?

myColl = someColl.findAll(filterClosure ???) 

Trả lời

7

Giả sử bộ sưu tập của bạn được một danh sách, bạn có thể sử dụng cà ri để cư tham số đóng cửa thêm với đối tượng của bạn:

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 

Trong đoạn mã trên, các filterClosure "nó" sẽ được chỉ định là những gì thông qua để curry như một tham số và "param" được thông qua một mục bộ sưu tập từ findAll. Điều này sẽ không làm việc cho một bộ sưu tập Bản đồ vì findAll cho nó có một đóng cửa với một hoặc hai tham số.