【问题标题】:Add empty mapping in MultiValuedMap在 MultiValuedMap 中添加空映射
【发布时间】:2017-12-20 09:35:16
【问题描述】:

我正在使用来自 commons-collections 的 MultiValuedMap。我正在尝试在地图中添加一个带有空列表的条目。

如果你有Map<String, List<String>>,你就会有put("string", new ArrayList<String>())

我可以用 MultiValuedMap 做到这一点吗?

我试过了:

map.asMap().put(stringValue, new ArrayList<>())

还有:

map.put(stringValue, null)

第一行抛出异常(UnsupportedOperation),第二行在列表中有null 值,这是我不想要的。

【问题讨论】:

  • 为什么需要这个?由于 MultiValuedMap 隐式创建值列表,因此通常会考虑列表是否存在的实现细节。
  • Apache Commons 的大部分功能已被 Java 8 取代。您可以只使用普通的 Java API 方法 Map.computeIfAbsent 而不是使用 MultiValuedMap。为您节省一个外部依赖项。

标签: java collections apache-commons


【解决方案1】:

如果没有值,get 方法会返回一个空列表,因此不需要初始化任何内部列表。如果您必须区分不存在的键和映射到空集合的键,它可能会混淆 contains(key) 等方法的语义。

任何类似这样的行为都是特定于实现的,并且可能因库版本而异。但即使查看implementation,您似乎也不能有一个空的内部列表。内部列表仅在实际包含至少一个元素时才被初始化,并在所有元素都被移除时被移除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多