如何使用相同的键连接2 Java Map<String, Object>
而不覆盖
嗨,我正在尝试在java中连接2个地图,并尝试使用putAll()
,但此方法会覆盖具有相同键的值
示例初始地图:
{Foo: "A", Bar: "B"}
{Foo: "C", Bar: "D"}
我想要这样的一些:
{ Foo0: "A", Bar0: "B", Foo1: "C", Bar1: "D" }
答案 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 :(得分: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;
}