如何使用Guava Multimap的replaceValues方法?

时间:2012-04-16 08:13:06

标签: java guava multimap

我想在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);

假设我想用新值5.99替换值4.3,我应该怎么做,该方法需要一些Iterable函数,我不确定如何实现它..

这是错误..

  

方法replaceValues(Integer,Iterable)中的   类型Multimap不适用于参数(int,   浮动)

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

public class 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);
}

}

//结果:{book = [4,3],game = [4,3]}