2009-09-07 15 views
7

Nasıl şimdi findall bu kapatma çağırabilirsiniz filtreleme kapatılmasıGroovy findAll kapatma parametreleri

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

benim param ile findAll harika kullanmak istiyor? Aşağıda olduğu gibi?

myColl = someColl.findAll(filterClosure ???) 

cevap

7

bir liste koleksiyonunuzu edildi varsayarsak, sizin nesne ile ekstra kapatma parametresini doldurmak için köri kullanabilirsiniz: Yukarıdaki kodda

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 "o" ne atanacak bir parametre olarak körelmeye geçti ve "param", findAll öğesinden bir koleksiyon öğesinden geçirildi. Bu, bir Map koleksiyonu için işe yaramaz çünkü bir ya da iki parametreyle bir kapanma gerektirdiği için findAll.