【问题标题】:Guava Mutlimap to HashMapGuava Multimap 到 HashMap
【发布时间】:2016-11-23 12:53:26
【问题描述】:

是否有可能以任何方式将 Multimap 转换为 HashMap。我知道我们可以将 multimap 转换为 map,但我想将 multimap 转换为 hashmap。我不认为这是可能的,但如果有任何出路,请告诉我。

【问题讨论】:

  • 您不能将Multimap转换HashMap,因为正如名称所示-它们是不同的东西。您可以在Multimap 上致电asMap(),如果您想确保它是HashMap,请尝试Maps.newHashMap( multimap.asMap() )。不过需要注意的是:你会得到一个Map<K, Collection<V>>,所以如果你有机会在Map<K, V>之后被警告这可能会导致数据丢失(多图的存在是有原因的)。
  • 我的回答对你有帮助吗?
  • @Thomas 你为什么不提供你的评论作为答案?
  • @mfulton26 你是对的,我会改变它:)

标签: java collections guava


【解决方案1】:

是否有可能以任何方式将 Multimap 转换为 HashMap。

不,您不能 Multimap 转换为 HashMap,因为 - 正如名称所示 - 它们是不同的东西,即 Multimap 旨在映射 multiple 值到键,而 Map 旨在将 one 值映射到键。因此,将Multimap<K, V> 转换为Map 总是会产生类似Map<K, Collection<V>> 的东西(或者,取决于实际的Multimap 实现以及使用其他一些方法Map<K, List<V>> 等)。

我知道我们可以将 multimap 转换为 map,但我想将 multimap 转换为 hashmap。

您可能指的是返回Map<K, Collection<V>>asMap() 方法。这些可能不是HashMap 的实例,但您可以通过调用Maps.newHashMap( multimap.asMap() ) 轻松创建一个,它基本上采用生成的映射并将值(引用)复制到新的HashMap

【讨论】:

  • No, you can't cast a Multimap to a HashMap since - the names indicate - they are different things 大声笑 - 没有意义。您可以将Exception 转换为RunTimeException
  • @xenteros 不,你不能,RuntimeException 扩展Exception,而不是相反。至于答案,很明显MultimapMap是不相关的接口,是之后开发的。
  • @xenteros RuntimeException 是一个 Exception,因此这种情况有效(尽管不一定在两个方向上都取决于实际实现)。但是MultimapMap 是不同的东西,没有共同的层次结构(Object ofc 除外)。只是它们都是地图并不意味着您可以投射它们。
  • 我只是向你展示这个论点是愚蠢的。为什么要根据类名来判断功能
  • @xenteros 因为人们通常会这样做:他们选择的类名尽可能多地提供有关预期用途和功能的信息。由于Map 和所有实现都在 Java 世界中普遍使用,每个开发人员都应该知道这些映射的基本属性:每个键一个值(我也在该句子的第二部分中解释过,我得到的区别是名称中的“多”部分Multimap)。
猜你喜欢
  • 2019-05-03
  • 2015-04-30
  • 2011-09-08
  • 1970-01-01
  • 2010-12-07
  • 2012-10-28
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多