no puedo encontrar nada construido en ... pero utilizando el ExpandoMetaClass Puedo hacer esto:
ArrayList.metaClass.collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
esto se suma el método Recolector a todos ArrayLists ... No estoy seguro de por qué agregarlo a la lista o colección no funcionó .. supongo que es para otra pregunta ... pero ahora puedo hacer esto ...
assert ["foo":"oof", "42":"24", "bar":"rab"] ==
["foo", "42", "bar"].collectMap { return [it, it.reverse()] }
de la Lista de Mapa calculada con un cierre ... exactamente lo que estaba buscando.
edición: la razón por la que no podía añadir el método de la Lista de las interfaces y la colección fue porque yo no hice esto:
List.metaClass.enableGlobally()
después de esa llamada método, se puede añadir métodos a los que las interfaces .. en este caso significa mi método Recolector trabajará en rangos de la siguiente manera:
(0..2).collectMap{[it, it*2]}
que produce el mapa: [0: 0, 1: 2, 2: 4]
comentario de Amir es ahora la respuesta correcta: http://stackoverflow.com/a/4484958/27561 –