在迭代地图时更新地图中的值

时间:2014-01-22 20:04:08

标签: map groovy

我对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) }

提前致谢。

1 个答案:

答案 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);
    }
}