0

グアバのマルチマップについて質問があります。ドキュメントはどういうわけかあいまいです。マルチマップの put-Method については、ecrise から次の説明が得られます。

指定された値をこのマップ内の指定されたキーに関連付けます (オプションの操作)。マップに以前にキーのマッピングが含まれていた場合、古い値は指定された値に置き換えられます。

http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Multimap.html#put(K,V)のドキュメントには、次のように書かれています。

マルチマップにキーと値のペアを格納します。マルチマップの実装によっては、キーと値のペアの重複を許可するものがあります。その場合、put は常に新しいキーと値のペアを追加し、マルチマップのサイズを 1 増やします。他の実装では重複を禁止し、既にマルチマップにあるキーと値のペアを保存しても効果はありません。 .

日食の説明は理にかなっていて、値が上書きされる理由を説明していますが、ドキュメントには、1 つのキーに対して複数の値を格納できると記載されています。

私のコードの一部を示します。

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問題なく動作しますが、MultimapinupdateMapをエントリのない完全に新しいものに置き換えて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 に答える