使用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);
应该发生的事情是用户本应该是关键,他应该有一个企业个人和社交卡。实际上发生的事情是他最终只得到了一张社交卡,因为我认为这是最后一次运行,因此会覆盖之前的。
我该如何修改呢?
由于
答案 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));
}
然后你对其他两张地图也这样做。