2009-09-07 14 views
7

chcę użyć Groovy findAll z moim param do zamknięcia filtrującegoGroovy FindAll parametry zamykające

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

Jak mogę teraz nazwać zamknięcie w findAll? Jak poniżej?

myColl = someColl.findAll(filterClosure ???) 

Odpowiedz

7

Zakładając, że kolekcja została lista, można użyć curry, aby wypełnić dodatkowy parametr zamknięcia z obiektem:

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 

w kodzie powyżej, filterClosure „to” zostanie przypisana, co jest przekazane curry jako parametr i "param" jest przekazywane elementowi kolekcji z findAll. Nie działa to w przypadku kolekcji Map, ponieważ findAll wymaga zamknięcia jednego lub dwóch parametrów.

Powiązane problemy