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中使用
映射
,它的键是
字符串
,值是
列表

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]