【问题标题】:Updating value in a map while iterating the map groovy在迭代地图时更新地图中的值
【发布时间】:2014-01-22 20:04:07
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 出于同样的原因,在方法调用之外调用 void run( int a ) { a++ } 不会更改 a
  • 谢谢 tim_yates。如果不是评论,我会接受这个作为答案。

标签: map groovy


【解决方案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);
    }
}

【讨论】:

  • 我忘记了 groovy 作为一种类似 Java 的语言,这是我的错。谢谢@Michael。
猜你喜欢
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多