【发布时间】:2012-12-06 02:41:02
【问题描述】:
我有两个映射,其中一个 String 作为键,Set 作为它的值。这两个映射可以共享相同的键。如果两个地图具有相同的键,我正在尝试将两个 Set 值合并在一起。问题是,第二个映射可能为空,并且由于并非所有键都在两个映射之间共享,因此集合也可能为空。我想出了几个选项,但它们看起来都很乱。想知道是否有人有更有效/更漂亮的方法。这是我目前所拥有的:
Set<String> mergedSet = (firstMap.containsKey(commonKey)) ? firstMap.get(commonKey) : new HashSet<String>();
mergedSet.addAll(secondMap != null && secondMap.containsKey(commonKey) ? secondMap.get(commonKey) : new HashSet<String>());
【问题讨论】:
-
我强烈建议您永远拥有可以是
null的集合。如果您在初始化时使用空集合,您将避免代码中出现各种特殊情况(或运行时 NPE)。这个建议在许多 Java 资源中,例如javapractices.com/topic/TopicAction.do?Id=59 -
@AndrewLazarus:虽然我同意你的观点,但在这种情况下,OP 没有将集合初始化为 null。他只是没有在第二个映射中存储第一个映射中存在的键的集合。这就是为什么 Guava 的多张地图如此酷炫的原因。
-
@JBNizet,我不是 100% 确定,但我认为
secondMap本身并没有存储在地图中,最后一行暗示它可能为空。