如果你知道你沒有重複鍵,或者你想在map2
值從map1
的重複鍵覆蓋值,你可以只寫
map3 = new HashMap<>(map1);
map3.putAll(map2);
如果您需要在如何更好地控制值合併後,可以使用Map.merge
,在Java 8中添加,它使用用戶提供的BiFunction
合併重複鍵的值。 merge
對單個鍵和值進行操作,因此您需要使用循環或Map.forEach
。在這裏,我們連接字符串的重複鍵:
map3 = new HashMap<>(map1);
for (Map.Entry<String, String> e : map2.entrySet())
map3.merge(e.getKey(), e.getValue(), String::concat);
//or instead of the above loop
map2.forEach((k, v) -> map3.merge(k, v, String::concat));
如果你知道你沒有重複鍵,並希望執行它,你可以使用拋出AssertionError
合併功能:
map2.forEach((k, v) ->
map3.merge(k, v, (v1, v2) ->
{throw new AssertionError("duplicate values for key: "+k);}));
服用從這個特定問題退步,Java 8流庫提供了toMap
和groupingBy
Collectors。如果你在一個循環中重複合併地圖,你可能會重構你的計算以使用流,這既能夠澄清你的代碼,又能使用並行流和併發採集器來實現簡單的並行處理。
你還沒有說明你想要發生什麼,如果一個密鑰存在這兩個地圖。 – 2013-12-16 01:05:34
Java 8有map1.merge(map2) – 2015-04-08 23:56:06
@SambitTripathy,你有關於該文檔的鏈接嗎?我似乎無法找到它。 – JohnK 2016-08-05 20:54:16