2009-09-07 2 views
7

voglio usare Groovy findAll con la mia param alla chiusura di filtraggioGroovy findall parametri di chiusura

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

Come posso ora chiamare questa chiusura in findAll? Come sotto?

myColl = someColl.findAll(filterClosure ???) 

risposta

7

Supponendo tua collezione è stata una lista, è possibile utilizzare il curry per popolare il parametro in più di chiusura con il vostro oggetto:

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 

Nel codice precedente, il filterClosure "it" sarà assegnato ciò che è passato a curry come parametro e "param" è passato un elemento di raccolta da findAll. Ciò non funzionerebbe per una raccolta di mappe poiché findAll richiede una chiusura con uno o due parametri.