我需要用Iterable<Map.Entry>
填充地图。以下是原始java代码:
Iterable<Map.Entry<String, String>> conf;
Iterator<Map.Entry<String, String>> itr = conf.iterator();
Map<String, String> map = new HashMap<String, String>();
while (itr.hasNext()) {
Entry<String, String> kv = itr.next();
map.put(kv.getKey(), kv.getValue());
}
我必须在groovy中重写它。有没有简洁的groovy方式来做到这一点?
答案 0 :(得分:2)
我会使用collectEntries
。它与collect
类似,但其目的是创建Map
。
def sourceMap = ["key1": "value1", "key2": "value2"]
Iterable<Map.Entry<String, String>> conf = sourceMap.entrySet()
def map = conf.collectEntries {
[(it.key): it.value]
}
请注意it.key
周围的圆括号,它允许您使用变量引用作为新生成的Entry
的键。
答案 1 :(得分:1)
在Groovy中,您可以使用每个闭包而不是 Iterator ,如下所示
Map<Map.Entry<String, String>> sourceMap = ["key1" : "value1", "key2" : "value2"]
Map<Map.Entry<String, String>> targetMap = [:]
sourceMap.each{ key, value ->
targetMap[key] = value
}
println targetMap
这里的工作示例:https://groovyconsole.appspot.com/script/5100319096700928