7

findAllクロージャーをフィルタリングするためにパラメーターでgroovy を使用したい

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

findAll でこのクロージャーを呼び出すにはどうすればよいですか? 以下のように?

myColl = someColl.findAll(filterClosure ??? )
4

1 に答える 1

7

コレクションがリストであると仮定すると、カレーを使用して、追加のクロージャーパラメーターにオブジェクトを設定できます。

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"にパラメーターとしてカレーに渡されるものが割り当てられ、"param"にfindAllからのコレクションアイテムが渡されます。findAllは、1つまたは2つのパラメーターのいずれかでクロージャーを取得するため、これはMapコレクションでは機能しません。

于 2009-09-07T06:27:54.560 に答える