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

问题描述 投票:17回答:2

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

我试过这个:

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

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

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

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

guava multimap
2个回答
25
投票

Multimap故意禁止这种方法,你提议的解决方案是无操作 - 它实际上不会做任何事情。

Multimap的工作方式是multimap.get(key)永远不会返回null,但总是返回一些集合 - 可能是空的。 (但支持Multimap实现可能实际上并不存储该键的任何内容,并且如果键未映射到非空集合,则它不会出现在keySet()中.Multimap is not a Map<K, Collection<V>>。)

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


8
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.