关于循环:在groovy中遍历Map ,Map >

Iterate over Map, Map> in groovy

嗨,我有复杂的结构

1
 Map<Map<String,String>, Map<String,String>> a

我想遍历所有元素。 我试过了:

1
2
3
for(Map.Entry<Map<String,String>, Map<String,String>> first:firstMap.keySet()) {
...
}

错误是

1
Cannot cast object '{key1=value1, key2=value2, key3=value3, key4=value4}' with class 'java.util.LinkedHashMap' to class 'java.util.Map$Entry' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.Map$Entry(java.util.LinkedHashMap)

如何遍历我的地图?


keySet()仅返回其键,因此它是Map的列表。 如果要遍历其Map.Entry,请放下.keySet()

1
2
3
for (Map.Entry<Map<String, String>, Map<String, String>> entry : firstMap) {
  println"entry=$entry"
}

其他循环选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// iterate with two arguments
firstMap.each { Map<String, String> key, Map<String, String> value ->
  println"key=$key, value=$value"
}

// iterate through entries
firstMap.each { Map.Entry<Map<String, String>, Map<String, String>> entry ->
  println"entry=$entry"
}

// untyped
for (entry in firstMap) {
  println entry
}

您可以只使用each

1
2
3
4
5
6
def a = [ ([a:'tim',b:'xelian']):[ a:1,b:2 ],
          ([a:'alice',b:'zoe']):[ a:3,b:4 ] ]

a.each { key, value ->
    println"Key $key == Value $value"
}