将具有空值的键添加到Guava Multimap

时间:2012-07-20 22:48:14

标签: guava multimap

我需要为一个带有空集合的Guava Multimap添加一个键作为值。我该如何做到这一点?

我试过了:

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

但是调用get()会返回一个包含一个元素的列表,该列表为null。我通过以下方式解决了这个问题:

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

但我想知道这是不是一件坏事吗?我知道当删除最后一个值时,Guava会自动删除一个键以保持containsKey()的一致性。我最好的选择是什么?

2 个答案:

答案 0 :(得分:25)

Multimap 故意禁止这种做法,而您建议的解决方法是无操作 - 它实际上无法做任何事情。

Multimap的工作方式是multimap.get(key)永远不会返回null,但总会返回一些集合 - 可能为空。 (但支持Multimap实施可能实际上并不存储该密钥的任何内容,如果某个密钥未映射到非空集合,则它会赢得&#39; t例如出现在keySet()Multimap is not a Map<K, Collection<V>>。)

如果要映射到空集合,则必须使用Map<K, List<V>>

答案 1 :(得分:8)

正如javadoc所涵盖的,多图在概念上是一堆键值对,其中键不一定是唯一的,例如a = 1,a = 2,b = 3。如果没有与a关联的值,则a没有键值对,因此a在multimap中不存在。

您可以做的一件事就是为您关心的整个密钥区域保留一个单独的Set<K>,或者仅保留与没有值对应的其他密钥。另一种方法是使用Map<K, Collection<V>>Map<K, Something>,其中Something包含可能为空的集合。