मुझे इसमें निर्मित कुछ भी नहीं मिल रहा है ... लेकिन ExpandoMetaClass का उपयोग करके मैं यह कर सकता हूं:
ArrayList.metaClass.collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
यह सभी ArrayLists के लिए संग्रहण विधि को जोड़ता है ... मुझे यकीन नहीं है कि इसे सूची या संग्रह में शामिल करने से काम क्यों नहीं हुआ .. मुझे लगता है कि यह एक और प्रश्न के लिए है ... लेकिन अब मैं यह कर सकता हूं ...
assert ["foo":"oof", "42":"24", "bar":"rab"] ==
["foo", "42", "bar"].collectMap { return [it, it.reverse()] }
एक बंद के साथ गणना की गई सूची की सूची से ... बिल्कुल वही जो मैं देख रहा था।
संपादित करें: कारण कि मैं इंटरफेस की सूची और संग्रह में विधि नहीं जोड़ सका क्योंकि मैंने ऐसा नहीं किया था:
List.metaClass.enableGlobally()
उस तरीके से कॉल करने के बाद, आप इंटरफेस में तरीकों को जोड़ सकते हैं .. जो इस मामले में है कि मेरा संग्रह विधि इस तरह से श्रेणियों पर काम करेगा:
(0..2).collectMap{[it, it*2]}
जो नक्शा देता है: [0: 0, 1: 2, 2: 4]