我需要为一个带有空集合的Guava Multimap添加一个键作为值。我该如何做到这一点?
我试过这个:
map.put( "my key", null );
但是调用get()会返回一个包含一个元素的列表,该列表为null。我通过以下方式解决了这个问题:
map.putAll("my key2", new ArrayList())
但我想知道这是不是一件坏事吗?我知道当删除最后一个值时,Guava会自动删除一个键以保持containsKey()的一致性。我最好的选择是什么?
Multimap
故意禁止这种方法,你提议的解决方案是无操作 - 它实际上不会做任何事情。
Multimap
的工作方式是multimap.get(key)
永远不会返回null,但总是返回一些集合 - 可能是空的。 (但支持Multimap
实现可能实际上并不存储该键的任何内容,并且如果键未映射到非空集合,则它不会出现在keySet()
中.Multimap
is not a Map<K, Collection<V>>
。)
如果要映射到空集合,则必须使用Map<K, List<V>>
。
正如javadoc所涵盖的,多图在概念上是一组键值对,其中键不一定是唯一的,例如a = 1,a = 2,b = 3。如果没有与a关联的值,则a没有键值对,因此a在multimap中不存在。
您可以做的一件事是为您关心的整个密钥区域保留一个单独的Set<K>
,或者仅保留与没有值对应的其他密钥。另一种方法是使用Map<K, Collection<V>>
或Map<K, Something>
,其中Something
包含可能会或可能不会为空的集合。