3

Guava が提供する MultiMap の値を追加、削除、および置換したいと考えています。

私は現在、値を追加するためにこれを行っています..

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);

Guava ライブラリを使用すると、値を簡単に削除できます。

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

しかし、replaceValues メソッドを使用するにはどうすればよいでしょうか?

私はこれを意味します

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

値 4.3 を新しい値 5.99 に置き換えたいとします。どのようにすればよいですか。メソッドは反復可能な関数を期待しており、それを実装する方法がわかりません..

これはエラーです..

タイプ Multimap のメソッド replaceValues(Integer, Iterable) は、引数 (int、float) には適用できません。

4

2 に答える 2

4

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

マップが変更可能な場合、 を使用して単一のキーにマップされた値のコレクションに関する変更可能なビューを取得できますが、返されるビューはアトミックな置換メソッドを使用しないgetプレーンです。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;
}
于 2012-04-16T08:22:06.183 に答える