組み込まれているものが見つかりません...しかし、ExpandoMetaClassを使用してこれを行うことができます:
ArrayList.metaClass.collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
これにより、すべてのArrayListsにcollectMapメソッドが追加されます...リストまたはコレクションへの追加が機能しなかった理由がわかりません..別の質問のためだと思います...しかし、今はこれを行うことができます...
assert ["foo":"oof", "42":"24", "bar":"rab"] ==
["foo", "42", "bar"].collectMap { return [it, it.reverse()] }
リストから計算されたマップまで、1つのクロージャーで...まさに私が探していたものです。
編集:メソッドをインターフェイスのリストとコレクションに追加できなかった理由は、これを行わなかったためです。
List.metaClass.enableGlobally()
そのメソッド呼び出しの後で、インターフェイスにメソッドを追加できます。この場合、私のcollectMapメソッドは次のような範囲で機能します。
(0..2).collectMap{[it, it*2]}
これにより、マップが生成されます:[0:0、1:2、2:4]