2014-01-22 34 views
0

我對Groovy非常陌生,但無法通過網絡找到我的問題的答案。 我有一個非常簡單的地圖:Map<String, Object>。我需要在迭代時使用方法更新此地圖的值。我已經找到一種方法來做到這一點:在迭代地圖的同時更新地圖的值groovy

Map<String, Object> newMap = myMap.each { it -> it.value = getValue(it.key) } 

我不明白爲什麼這不起作用:提前

Map<String, Object> newMap = myMap.each { k,v -> v = getValue(k) } 

感謝。

+2

出於同樣的原因,調用'無效的run(INT一個){A ++}'不改變'方法調用 –

+0

的了'外面謝謝tim_yates。如果不是評論,我會接受這個答案。 – GokcenG

回答

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); 
    } 
} 
+0

我忘了Groovy是Java語言,是我的錯。謝謝@邁克爾。 – GokcenG