Groovy найти все параметры закрытия

Я хочу использовать groovy findAll с моим параметром для закрытия фильтрации

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

Как мне теперь вызвать это замыкание в findAll? Как ниже?

myColl = someColl.findAll(filterClosure ??? )

person Alexey Sviridov    schedule 07.09.2009    source источник


Ответы (1)


Предполагая, что ваша коллекция представляет собой список, вы можете использовать curry для заполнения дополнительного параметра закрытия вашим объектом:

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 «it» будет присвоено то, что передается в curry в качестве параметра, а «param» передается элемент коллекции из findAll. Это не сработает для коллекции Map, так как findAll для нее принимает замыкание с одним или двумя параметрами.

person John Wagenleitner    schedule 07.09.2009