Saya tidak dapat menemukan apa pun yang ada di dalamnya ... tetapi menggunakan ExpandoMetaClass saya dapat melakukan ini:
ArrayList.metaClass.collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
ini menambahkan metode collectMap ke semua ArrayLists ... Saya tidak yakin mengapa menambahkannya ke Daftar atau Koleksi tidak berhasil .. Saya rasa itu untuk pertanyaan lain ... tapi sekarang saya bisa melakukan ini ...
assert ["foo":"oof", "42":"24", "bar":"rab"] ==
["foo", "42", "bar"].collectMap { return [it, it.reverse()] }
dari Daftar ke Peta yang dihitung dengan satu penutupan ... persis seperti yang saya cari.
Sunting: alasan saya tidak dapat menambahkan metode ke Daftar dan Koleksi antarmuka adalah karena saya tidak melakukan ini:
List.metaClass.enableGlobally()
setelah pemanggilan metode itu, Anda dapat menambahkan metode ke antarmuka .. yang dalam hal ini berarti metode collectMap saya akan bekerja pada rentang seperti ini:
(0..2).collectMap{[it, it*2]}
yang menghasilkan peta: [0: 0, 1: 2, 2: 4]