使用Map.putAll()时覆盖

时间:2014-08-12 14:39:23

标签: java hashmap

使用Map.putAll()时遇到了一些困难。它不是更新/添加特定记录到我的主地图,而是覆盖条目:

  ConcurrentMap<String, ConcurrentHashMap<CardType, Card>> cache = new ConcurrentHashMap<String, ConcurrentHashMap<CardType, Card>>();

生成三个单独的地图如下:

   ConcurrentMap<String, ConcurrentHashMap<CardType, Card>> businessCardCache = buildBusinesscardCacheValues(connection, getBusinessCards);
   ConcurrentMap<String, ConcurrentHashMap<CardType, Card>> personalCardCache = buildPersonalcardCacheValues(connection, getPersonalCards);
   ConcurrentMap<String, ConcurrentHashMap<CardType, Card>> socialCardCache = buildSocialcardCacheValues(connection, getSocialCard);
   cache.putAll(businessCardCache);
   cache.putAll(personalCardCache);
   cache.putAll(socialCardCache);

应该发生的事情是用户本应该是关键,他应该有一个企业个人和社交卡。实际上发生的事情是他最终只得到了一张社交卡,因为我认为这是最后一次运行,因此会覆盖之前的。

我该如何修改呢?

由于

1 个答案:

答案 0 :(得分:2)

您当前初始化cache会导致cache.putAll(personalCardCache);替换cache.putAll(businessCardCache);为两个地图中显示的键添加的值。

如果您希望cache包含每个用户的所有卡片(取自所有3个输入地图),您应该以不同的方式初始化它:

for (String key : businessCardCache.keySet()) {
    ConcurrentHashMap<CardType, Card> cards = null;
    if (cache.containsKey(key) {
        cards = cache.get(key);
    } else {
        cards = new ConcurrentHashMap<CardType, Card>();
    }
    cards.putAll (businessCardCache.get(key));
}

然后你对其他两张地图也这样做。