2009-09-07 9 views
7

Je veux utiliser groovy findAll avec ma fermeture à param filtrageparamètres de fermeture Groovy findAll

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

Comment puis-je appeler cette fermeture en findAll? Comme ci-dessous?

myColl = someColl.findAll(filterClosure ???) 

Répondre

7

Si l'on suppose votre collection a été une liste, vous pouvez utiliser cari pour remplir le paramètre de fermeture supplémentaire avec votre objet:

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 

Dans le code ci-dessus, le filterClosure « il » sera attribué ce qui est passé à curry en tant que paramètre et "param" est passé un élément de collection de findAll. Cela ne fonctionnerait pas pour une collection de cartes puisque findAll prend une fermeture avec un ou deux paramètres.