Java:Guava multimaps,put-Method用相同的密钥覆盖条目

时间:2013-10-22 17:15:32

标签: java guava multimap

我有一个关于番石榴多重映射的问题。文档有些含糊不清。对于多图中的put-Method,eclise给出了这样的解释:

  

将指定的值与此映射中的指定键相关联   (可选操作)。如果地图以前包含映射   键,旧值由指定值替换。

http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Multimap.html#put(K,V)上的文档说明了这一点:

  

在multimap中存储键值对。   一些多图实现允许重复的键值对   哪个案例总是添加一个新的键值对并增加   多图大小由1.其他实现禁止重复,和   存储已存在于多图中的键值对无效。

eclipse中的解释很有意义,并解释了我的值被覆盖的原因,但文档说明可以为一个键存储多个值。

我给你看了一段我的代码:

public class Updatemanager {

static Map<String,Multimap<String,Values>> updateMap = new HashMap<String, Multimap<String, Values>>();

public static void collectUpdates(String name, String categorie, Values v)
{
    Multimap<String, Values> mm = HashMultimap.create();
    mm.put(categorie, v);
    updateMap.put(name, mm);        
}

我想要的输出如下:

{name={categorie1=[Values], categorie2 = [Values]}

现在它如何总是覆盖一个特定键的updateMap的内容。我怎么能做到,现在覆盖并只是添加到地图?

提前多多感谢。

1 个答案:

答案 0 :(得分:4)

Multimap工作得很好,但您要用Multimap替换updateMap中没有条目的全新Multimap,然后在其中添加条目

看起来你想要

 updateMap.get(name).put(categorie, v);

或者,如果您之前没有看过Multimap,则需要创建新的name

 if (!updateMap.containsKey(name)) {
   updateMap.put(name, HashMultimap.<String, Values>create());
 }
 updateMap.get(name).put(categorie, v);