ok... j'ai joué avec ce un peu plus et je pense que c'est une super méthode...
def collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
ExpandoMetaClass.enableGlobally()
Collection.metaClass.collectMap = collectMap
Map.metaClass.collectMap = collectMap
maintenant, toute sous-classe de la Carte ou de la Collection de cette méthode...
ici, je l'utilise pour inverser la clé/valeur dans une Carte
[1:2, 3:4].collectMap{[it.value, it.key]} == [2:1, 4:3]
et ici, je l'utilise pour créer une carte à partir d'une liste
[1,2].collectMap{[it,it]} == [1:1, 2:2]
maintenant, j'ai juste pop ce dans une classe qui est appelée que mon application est de commencer et cette méthode est disponible tout au long de mon code.
EDIT:
pour ajouter une méthode à tous les tableaux...
Object[].metaClass.collectMap = collectMap