2012-04-16 7 views
2

Guavaが提供するマルチマップの値を追加、削除、置き換えたいとします。Guava MultimapのreplaceValuesメソッドの使用方法?

私は値を削除...現在値を追加する

static Multimap<Integer, Float> myMultimap; 
myMultimap = ArrayListMultimap.create(); 
myMultimap.put(1, (float)4.3); 
myMultimap.put(2, (float)4.9); 
myMultimap.put(1, (float)4.7); 
myMultimap.put(1, (float)4.5); 

これを行うには、グアバライブラリと簡単です。

myMultimap.remove(1,(float)4.7); 

しかし、どのようにreplaceValuesメソッドを使用できますか?

私はこの

myMultimap.replaceValues(1, (float)4.3); 

は、私は、新しい値5.99と値4.3を交換したかったと言う意味でどのように私はこの方法は、いくつかの反復処理可能な機能を期待し、私はそれを実装する方法のよう確認していない、それを行う必要がありますMultimapは、引数のために適用されない タイプ(INT、で..

これは誤りである..

方法replaceValues(整数、反復処理可能)フロート)

答えて

4

Multimap.replaceValuesは、指定されたキーの既存の値のすべてを置き換える値のコレクションを取ります。 JavaDocからは、removeとそれに続くputを使用する必要があるようです。

マップが変更可能な場合は、getを使用して1つのキーにマップされた値のコレクションの変更可能なビューを取得できますが、返されるビューはアトムリプレース方法のない平文Collectionです。独自のヘルパーメソッドをいつでも作成できます。このメソッドはスレッドセーフではありません。

public static <K,V> boolean replaceValue(Multimap<K,V> map, K key, V oldValue, V newValue) { 
    if (map.remove(key, oldValue)) { 
     map.put(key, newValue); 
     return true; 
    } 
    return false; 
} 
+0

はあなたに感謝し、今はすべて意味があります...マルチマップの値を置き換える方法はありますか? –

+1

@mirroredAbstraction - キーにマッピングされたすべての値のみ - 一度に1つではありません。 –

+1

'ListMultimap'または' SetMultimap'を使うとき、 'Multimap#get'はそれぞれ' List'か 'Set'を返します:http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#マルチマップ –

0

パブリッククラスguava_main {

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Multimap map = HashMultimap.create(); 

    map.put("game", 1); 
    map.put("game", 2); 

    map.put("book", 4); 
    map.put("book", 3); 

    Iterable iter = map.get("book"); 
    map.replaceValues("game", iter); 

    System.out.println(map); 
} 

}

//結果:{ブック= [4]、[3]、ゲーム= [4]、[3]}

関連する問題