2012-09-02 13 views
20

में सूची के रूप में स्ट्रिंग और वैल्यू के रूप में कुंजी के साथ मानचित्र करें क्या कोई मुझे ग्रोवी में Map का उपयोग करने के उदाहरण के बारे में बता सकता है जिसमें String इसकी कुंजी और List मूल्य के रूप में है?ग्रोवी

उत्तर

27

ग्रूवी लगभग सभी जावा वाक्य रचना को स्वीकार करता है, तो विकल्प की एक स्पेक्ट्रम के रूप में नीचे दिखाया गया है, वहाँ है:

// Java syntax 

Map<String,List> map1 = new HashMap<String,List>(); 
List list1 = new ArrayList(); 
list1.add("hello"); 
map1.put("abc", list1); 
assert map1.get("abc") == list1; 

// slightly less Java-esque 

def map2 = new HashMap<String,List>() 
def list2 = new ArrayList() 
list2.add("hello") 
map2.put("abc", list1) 
assert map2.get("abc") == list2 

// typical Groovy 

def map3 = [:] 
def list3 = [] 
list3 << "hello" 
map3.'abc'= list1 
assert map3.'abc' == list3 
13
def map = [:] 
map["stringKey"] = [1, 2, 3, 4] 
map["anotherKey"] = [55, 66, 77] 

assert map["anotherKey"] == [55, 66, 77] 
+5

: ' map.stringKey = [1, 2, 3, 4]; map.anotherKey = [55, 66, 77] ' – Will

5

एक अतिरिक्त छोटा-सा हिस्सा उपयोगी में मूल्य के रूप में/सूची है जब नक्शे के साथ काम एक नक्शा withDefault(Closure) ग्रूवी में नक्शे पर विधि है। इसके बजाय निम्नलिखित कोड करने का:

Map m = [:] 
for(object in listOfObjects) 
{ 
    if(m.containsKey(object.myKey)) 
    { 
    m.get(object.myKey).add(object.myValue) 
    } 
    else 
    { 
    m.put(object.myKey, [object.myValue] 
    } 
} 

आप निम्न कर सकते हैं:

Map m = [:].withDefault{key -> return []} 
for(object in listOfObjects) 
{ 
    List valueList = m.get(object.myKey) 
    m.put(object.myKey, valueList) 
} 

डिफ़ॉल्ट के साथ साथ ही अन्य बातों के लिए इस्तेमाल किया जा सकता है, लेकिन मैं यह मेरे लिए सबसे अधिक आम उपयोग पाते हैं।

एपीआई: http://www.groovy-lang.org/gdk.html

मानचित्र -> withDefault (क्लोजर)

1

आप मानचित्र ग्रूवी घोषित करने के लिए की जरूरत नहीं है आंतरिक रूप में पहचानता

def personDetails = [firstName:'John', lastName:'Doe', fullName:'John Doe'] 

// print the values.. 
    println "First Name: ${personDetails.firstName}" 
    println "Last Name: ${personDetails.lastName}" 

http://grails.asia/groovy-map-tutorial

इसके अलावा