я ничего не могу найти встроенный ... но используя ExpandoMetaClass я могу это сделать:
ArrayList.metaClass.collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
это добавляет метод collectMap всем ArrayLists ... Я не уверен, почему добавив его в список или коллекция не работает .. Я думаю, что это еще вопрос ... но теперь я могу это сделать ...
assert ["foo":"oof", "42":"24", "bar":"rab"] ==
["foo", "42", "bar"].collectMap { return [it, it.reverse()] }
из списка расчетной карты с одним закрытием ... именно то, что я находясь в поиске.
Edit: почему я не мог добавить метод в список интерфейсов и сбор, потому что я не сделал этого:
List.metaClass.enableGlobally()
после этого вызова метода, вы можете добавить методы к интерфейсам .. который в данном случае означает, что мой метод collectMap будет работать на диапазонах, как это:
(0..2).collectMap{[it, it*2]}
, который дает карту: [0: 0, 1: 2, 2: 4]
комментарий Амира теперь правильный ответ: http://stackoverflow.com/a/4484958/27561 – 2015-05-24 18:01:16