2012-04-16 37 views
2

我想添加,刪除和替換由Guava提供的MultiMap中的值。如何使用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,我應該怎麼做,該方法需要一些可迭代的功能,我不知道是如何實現它..

這是錯誤..

方法replaceValues(整數,可迭代)在 類型Multimap之不適用於參數(INT, 浮動)

回答

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; 
} 
+0

謝謝,這一切都有道理...有沒有什麼方法可以替代多圖中的值? – 2012-04-16 08:33:15

+1

@mirroredAbstraction - 只有映射到一個鍵的所有值 - 不是一次一個。 – 2012-04-16 08:36:00

+1

當使用ListMultimap或SetMultimap時,Multimap#get'分別返回List或Set, Multimap之 – 2012-04-16 11:13:47

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]}

相關問題