Добавление ключа с пустым значением в 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
содержит коллекцию, которая может быть или не быть пустым.