Bất kỳ ai có thể chỉ cho tôi ví dụ về cách sử dụng Map
trong Groovy có khóa là String
làm khóa của nó và List
làm giá trị?Bản đồ với Khóa dưới dạng Chuỗi và Giá trị dưới dạng Danh sách trong Groovy
20
A
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
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}"
Ngoài ra: ' map.stringKey = [1, 2, 3, 4]; map.anotherKey = [55, 66, 77] ' – Will