2013-01-19 24 views
2

下面是從2個linkedHashMaps數據:更改LinkedHashMapValues

valueMap: { y=9.0, c=2.0, m=3.0, x=2.0} 
formulaMap: { y=null, ==null, m=null, *=null, x=null, +=null, c=null, -=null, (=null,)=null, /=null} 

我想要做的是從第1映射到第二地圖的相應位置上的數值輸入。兩張地圖都以字符串,雙作爲參數。

這是迄今爲止我嘗試:

for(Map.Entry<String,Double> entryNumber: valueMap.entrySet()){ 
    double doubleOfValueMap = entryNumber.getValue(); 
    for(String StringFromValueMap: strArray){ 
     for(Map.Entry<String,Double> entryFormula: formulaMap.entrySet()){   
     String StringFromFormulaMap = entryFormula.toString(); 
     if(StringFromFormulaMap.contains(StringFromValueMap)){ 
      entryFormula.setValue(doubleOfValueMap); 
     } 
     } 
    } 
} 

與這樣的是,它會將所有的值即Y,M,X的,C到最後雙重價值的問題。對值進行迭代將不起作用,因爲值通常與公式映射中的順序不同。理想情況下,我需要說的是如果formulaMap中的字符串與valueMap中的字符串相同,請將formulaMap中的值設置爲與valueMap中的值相同。

讓我知道你對我能做什麼有什麼想法嗎?

+1

什麼是'strArray'? – home

+0

它是一個arrayList。 – Digitalwolf

回答

4

這很簡單:

formulaMap.putAll(valueMap); 

如果你的價值的地圖包含了所有未包含在formulaMap鍵,你不想改變原來的,這樣做:

final Map<String, Double> map = new LinkedHashMap<String, Double>(valueMap); 
map.keySet().retainAll(formulaMap.keySet()); 
formulaMap.putAll(map); 

編輯由於評論看來問題根本不是我想的,所以在這裏:

// The result map 
for (final String key: formulaMap.keySet()) { 
    map.put(formulaMap.get(key), valueMap.get(key)); 

// Either return the new map, or do: 
valueMap.clear(); 
valueMap.putAll(map); 
+0

謝謝。我的代碼比我的例子複雜得多。目前獲取當前修改例外。將盡量讓這個工作。 – Digitalwolf

+0

使用示例代碼,它不應該是一個問題。集合非常強大;) – fge

+0

謝謝,我已經在我的問題中做了代碼演示,它工作= D。我的代碼中的其他內容顯然存在問題。 – Digitalwolf

1
for(Map.Entry<String,Double> valueFormula: valueMap.entrySet()){   
    formulaMap.put(valueFormula.getKey(), valueFormula.value()); 
} 
+0

謝謝。我的代碼比我的例子複雜得多。目前獲取當前修改例外。將盡量讓這個工作。 – Digitalwolf

+0

@Digitalwolf更新不應該產生錯誤了。 –

+0

不幸的是,它是我的代碼有一個錯誤。但你的解決方案絕對有效。謝謝 – Digitalwolf