0

我有一个关于番石榴多图的问题。该文档在某种程度上模棱两可。对于 multimaps 中的 put-Method,eclise 给我这个解释:

将指定值与此映射中的指定键关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定值。

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

在多重映射中存储一个键值对。一些 multimap 实现允许重复的键值对,在这种情况下 put 总是添加一个新的键值对并将 multimap 的大小增加 1。其他实现禁止重复,并且存储已经在 multimap 中的键值对没有效果.

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 的内容。我怎样才能做到,现在有覆盖并添加到地图中?

提前非常感谢。

4

1 回答 1

4

Multimap效果很好,但是您将inMultimap替换为没有条目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);
于 2013-10-22T17:16:51.267 回答