3

我想在 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 函数,我不确定如何实现它..

这是错误..

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

4

2 回答 2

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;
}
于 2012-04-16T08:22:06.183 回答
4
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]}
于 2014-02-05T08:00:59.193 回答