2012-04-16 34 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]}

相关问题