2012-09-02 7 views

Antwort

27

Groovy akzeptiert fast alle Java-Syntax, so gibt es ein Spektrum von Möglichkeiten, wie unten dargestellt:

// 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

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

5

Ein zusätzliches kleines Stück, das nützlich ist, wenn sie mit Karten/Liste als Wert zu tun in Eine Karte ist die withDefault(Closure) Methode auf Karten in groovy. Statt den folgenden Code zu tun:

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] 
    } 
} 

können Sie wie folgt vorgehen:

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

Mit Standard kann für andere Dinge auch verwendet werden, aber ich finde dies die häufigste für mich Anwendungsfall.

API: http://www.groovy-lang.org/gdk.html

Karte -> withDefault (Closure)

1

Sie brauchen keine Karte groovy zu erklären intern erkennt es

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

Verwandte Themen