将数据附加到Java中的Map

Viv*_*vek 4 java hashmap map

我有一张地图

Map<Integer, List<Object>> entireData;
Run Code Online (Sandbox Code Playgroud)

现在我要使用putAll添加一些数据

entireData.putAll(someData);
Run Code Online (Sandbox Code Playgroud)

someData返回的位置 Map<Integer, List<Object>>

现在,我有另一条线说

entireData.putAll(someMoreData);
Run Code Online (Sandbox Code Playgroud)

也会返回Map<Integer, List<Object>>,但通过执行此操作会覆盖现有wholeData的内容,如何追加?

tro*_*foe 6

Java Map Class Reference的第一行:

将键映射到值的对象.地图不能包含重复的键; 每个键最多可以映射一个值.

  • 这并没有真正回答你的问题,但是你问到了追加问题,你得到了一堆合理的答案. (2认同)

sjr*_*sjr 6

你想要一个Multimap之谷歌番石榴.使用Guava Multimap重写您的示例:

ListMultimap<Integer, Object> entireData = ArrayListMultimap.create();
Run Code Online (Sandbox Code Playgroud)

entireData.get(key)返回一个List<Object>.putAll不会覆盖旧密钥,但会将这些密钥的值附加到现有值.这比处理List自己初始化实例要好得多.


wil*_*ood 5

for (Integer key : someMoreData.keySet())
{
    if (entireData.containsKey(key))
    {
        entireData.get(key).addAll(someMoreData.get(key));
    }
    else
    {
        entireData.put(key, someMoreData.get(key));
    }
}
Run Code Online (Sandbox Code Playgroud)