2016-08-02 78 views
0

如何串連2的Java Map<String, Object>具有相同的密鑰相同的密鑰,而不覆蓋如何串連2 Java的地圖<字符串,對象>與無覆蓋

嗨,我試圖串聯在Java 2點的地圖,並與putAll()嘗試,但此方法重寫用相同的密鑰

實施例初始映射值:

{Foo: "A", Bar: "B"} 
{Foo: "C", Bar: "D"} 

我要一些這樣的:

{ Foo0: "A", Bar0: "B", Foo1: "C", Bar1: "D" } 
+3

構建的方法手動檢查的關鍵是有在添加之前? –

+0

你嘗試了什麼? – GManNickG

+0

我建議你在添加新鍵時創建新鍵。 –

回答

1

我建議你考慮以下結構:Map<String, List<String>>

在這種情況下,您不需要重寫一個鍵,只需在該鍵的末尾添加一個值即可。另外,您不必考慮如何命名新密鑰(Bar0,Bar1)。最後,如果出現新地圖(第三,第四),則其值將被添加而沒有問題。

你一些僞代碼:

map.put(key, 
     map.get(key) == null ? newListAddValueReturnList : 
           getListAddValueReturnList); 

好,代碼也爲你寫的:

String v = map.get(key); 

if(v == null) 
    map.put(key, new ArrayList<String>() {{ add(value); }}); 
else 
    v.add(value); 
1

這不是完全清楚你的要求是什麼,因爲@JohnBollinger指出。但是,如果我們把你的例子很簡單地說,你只是想添加一個索引每個鍵結束,在這種情況下,你可以做這樣的事情:

static Map<String, Object> merge(Map<String, Object> map1, Map<String, Object> map2) { 
    Map<String, Object> result = new HashMap<>(); 
    map1.forEach((k, v) -> result.put(k + "0", v)); 
    map2.forEach((k, v) -> result.put(k + "1", v)); 
    return result; 
} 
相關問題