Добавление ключа с пустым значением в Guava Multimap

Мне нужно добавить ключ к Guava Multimap с пустой коллекцией в качестве значения. Как это сделать?

Я пробовал это:

map.put( "my key", null );

но вызов get() возвращает список с одним элементом, который является нулевым. Я работал над этим, выполняя следующие действия:

map.putAll("my key2", new ArrayList())

но мне интересно, плохо ли это делать? Я знаю, что Guava автоматически удаляет ключ, когда последнее значение удаляется, чтобы содержать containsKey() последовательным. Какой мой лучший вариант здесь?

Ответы

Ответ 1

Multimap преднамеренно запрещает этот подход, и ваше предлагаемое решение обхода - это не-op - на самом деле он ничего не сделает.

Способ Multimap заключается в том, что multimap.get(key) никогда не возвращает null, но всегда возвращает некоторую коллекцию - возможно, пустую. (Но реализация поддержки Multimap, вероятно, фактически ничего не хранит для этого ключа, и если ключ не отображается в непустую коллекцию, он не будет отображаться, например, в keySet(). Multimap не является Map<K, Collection<V>>.)

Если вы хотите отобразить пустую коллекцию, вы должны использовать Map<K, List<V>>.

Ответ 2

Покрывая javadoc, мультимап концептуально представляет собой группу пар ключ-значение, где ключи необязательно уникальны, например a = 1, a = 2, b = 3. Если нет значений, связанных с a, то для пары нет значений ключа, поэтому a не существует в мультимадре.

Единственное, что вы можете сделать, это сохранить отдельный Set<K> для всего юниверса ключей, о котором вы заботитесь, или просто сохранить дополнительные ключи, которые не соответствуют значениям. Другим является использование Map<K, Collection<V>> или Map<K, Something>, где Something содержит коллекцию, которая может быть или не быть пустым.