Как использовать метод replaceValues ​​в Guava Multimap?

Я хочу добавлять, удалять и заменять значения в 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, (float)4.5);

Удалить значения проще с библиотекой Guava.

myMultimap.remove(1,(float)4.7);

Но как я могу использовать метод replaceValues?

я имею в виду это

 myMultimap.replaceValues(1, (float)4.3);

Скажем, я хотел заменить значение 4.3 новым значением 5.99, как мне это сделать, метод ожидает некоторую функцию Iterable, и я не уверен, как ее реализовать.

Это ошибка..

Метод replaceValues(Integer, Iterable) в типе Multimap неприменим для аргументов (int, float)


person Arif Nadeem    schedule 16.04.2012    source источник


Ответы (1)


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;
}
person David Harkness    schedule 16.04.2012
comment
спасибо, теперь все имеет смысл... Есть ли способ заменить значения в мультикарте? - person Arif Nadeem; 16.04.2012
comment
@mirroredAbstraction — только все значения сопоставляются с ключом, а не по одному за раз. - person David Harkness; 16.04.2012
comment
При использовании ListMultimap или SetMultimap Multimap#get возвращает List или Set соответственно: code.google.com/p/guava-libraries/wiki/ - person Etienne Neveu; 16.04.2012