我对Groovy很新,但我无法通过网络找到我的问题的答案。
我有一张非常简单的地图:Map<String, Object>
。我需要在迭代时使用方法更新此映射的值。我找到了办法:
Map<String, Object> newMap = myMap.each { it -> it.value = getValue(it.key) }
我无法理解为什么这不起作用:
Map<String, Object> newMap = myMap.each { k,v -> v = getValue(k) }
提前致谢。
答案 0 :(得分:1)
如果您了解Java,那么请将下面的代码视为Groovy正在做的粗略近似。请务必查看eachBlock
中有关v
import java.util.*;
public class Mapper {
public void each(Map<String,Object> map) {
for (String k : map.keySet()) {
Object v = map.get(k);
eachBlock(k,v);
}
}
public void eachBlock(String k, Object v) {
System.out.println("k: " + k + " , v: " + v);
// assigning to v here is local, on the stack:
// v = new Integer(22);
}
public static void main(String... args) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("abc", new Integer(99));
map.put("def", new Double(3.14d));
map.put("ijk", new ArrayList());
Mapper mapper = new Mapper();
mapper.each(map);
}
}