Groovy中键为字符串、值为列表的映射
有谁能给我举一个例子,说明如何在Groovy中使用Groovy中键为字符串、值为列表的映射,groovy,map,Groovy,Map,有谁能给我举一个例子,说明如何在Groovy中使用映射,它的键是字符串,值是列表。Groovy几乎接受所有Java语法,因此有一系列选择,如下所示: def map = [:] map["stringKey"] = [1, 2, 3, 4] map["anotherKey"] = [55, 66, 77] assert map["anotherKey"] == [55, 66, 77] // Java syntax Map<String,List> map1 = new
映射
,它的键是字符串
,值是列表
。Groovy几乎接受所有Java语法,因此有一系列选择,如下所示:
def map = [:]
map["stringKey"] = [1, 2, 3, 4]
map["anotherKey"] = [55, 66, 77]
assert map["anotherKey"] == [55, 66, 77]
// Java syntax
Map<String,List> map1 = new HashMap<>();
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", list2)
assert map2.get("abc") == list2
// typical Groovy
def map3 = [:]
def list3 = []
list3 << "hello"
map3.'abc'= list3
assert map3.'abc' == list3
//Java语法
Map map1=新的HashMap();
List list1=新的ArrayList();
列表1.添加(“你好”);
map1.put(“abc”,列表1);
断言map1.get(“abc”)==list1;
//稍微少一点Java风格
def map2=新的HashMap()
def list2=新的ArrayList()
列表2.添加(“你好”)
map2.put(“abc”,列表2)
断言map2.get(“abc”)==list2
//典型Groovy
def map3=[:]
def list3=[]
list3在处理映射/列表时,另一个很有用的小部分是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:
Map->withDefault(Closure)您不需要声明MapGroovy内部识别它
def personDetails = [firstName:'John', lastName:'Doe', fullName:'John Doe']
// print the values..
println "First Name: ${personDetails.firstName}"
println "Last Name: ${personDetails.lastName}"
在他的示例中,忘记用with default添加值。
以下是我最终使用的代码:
Map map = [:].withDefault { key -> return [] }
listOfObjects.each { map.get(it.myKey).add(it.myValue) }
另外:map.stringKey=[1,2,3,4];map.anotherKey=[55,66,77]