2012-09-02 42 views

Trả lời

27

Groovy chấp nhận hầu hết các cú pháp Java, vì vậy có một quang phổ của sự lựa chọn, như minh họa dưới đây:

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

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

5

Một thêm mảnh nhỏ đó là hữu ích khi giao dịch với bản đồ/danh sách như giá trị trong một bản đồ là phương pháp withDefault(Closure) trên bản đồ trong groovy. Thay vì làm đoạn mã sau:

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

Bạn có thể làm như sau:

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

Với mặc định có thể được sử dụng cho những thứ khác nữa, nhưng tôi tìm thấy điều này trong trường hợp sử dụng phổ biến nhất đối với tôi.

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

Bản đồ -> withDefault (Đóng cửa)

1

bạn không cần phải khai báo Map groovy nội nhận nó

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

Các vấn đề liên quan