2012-09-02 60 views

回答

27

Groovy中接受几乎所有的Java语法,所以有一个选择范围,如下图所示:

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

一个额外的小片与地图打交道时是有帮助的/列表中值地图是groovy中地图上的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) 
} 

在默认可用于其他的东西为好,但我觉得这是最常见的情况我。

API: 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