我想在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, 浮动)
答案 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]}