如何使用相同的键连接2 Java Map <string,object =“”>而不覆盖

时间:2016-08-02 20:12:23

标签: java dictionary

如何使用相同的键连接2 Java Map<String, Object>而不覆盖

嗨,我正在尝试在java中连接2个地图,并尝试使用putAll(),但此方法会覆盖具有相同键的值

示例初始地图:

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

我想要这样的一些:

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

2 个答案:

答案 0 :(得分:1)

我建议您考虑以下结构:Map<String, List<String>>

在这种情况下,您无需覆盖某个键,只需通过此键将值放到列表的末尾即可。此外,您不必考虑如何命名新密钥(Bar0Bar1)。最后,如果出现新地图(第三,第四),则会添加其值而不会出现问题。

一些伪代码:

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;
}