Java 如何使用番石榴多重映射的替换值方法?
我想在Guava提供的多重映射中添加、删除和替换值 我目前这样做是为了增加价值Java 如何使用番石榴多重映射的替换值方法?,java,guava,multimap,Java,Guava,Multimap,我想在Guava提供的多重映射中添加、删除和替换值 我目前这样做是为了增加价值 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, (fl
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);
但是如何使用replaceValues方法呢
我是说这个
myMultimap.replaceValues(1, (float)4.3);
假设我想用一个新的值5.99替换值4.3,我应该怎么做,该方法需要一些可移植的函数,我不确定如何实现它
这就是错误
方法中的replaceValues(Integer,Iterable)
类型Multimap不适用于参数(int,
浮动)
获取一组值,这些值替换给定键的所有现有值。从JavaDoc来看,似乎需要使用remove
,然后使用put
如果映射是可修改的,则可以使用get
获得映射到单个键的值集合的可修改视图,但返回的视图是一个普通的集合
,没有原子替换方法。您始终可以创建自己的助手方法。请注意,此方法不是线程安全的
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;
}
public静态布尔替换值(多映射映射、K键、V oldValue、V newValue){
if(映射移除(键,旧值)){
map.put(key,newValue);
返回true;
}
返回false;
}
谢谢,现在一切都有意义了。。。有什么方法可以替换多重映射中的值吗?@mirroredAbstraction-一次只能替换映射到一个键的所有值,而不是一个值。当使用列表多重映射
或设置多重映射
时,多重映射#get
分别返回列表
或集
:
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;
}
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);
}
}
// result : {book=[4, 3], game=[4, 3]}