【问题标题】:Guava: construct a Multimap by inverting a MapGuava:通过反转 Map 构造 Multimap
【发布时间】:2011-12-30 17:18:36
【问题描述】:

为什么 Guava 没有以下工厂调用来从普通 Map 创建 MultiMap?

public static <K,V> MultiMap<K,V> invertMap(Map<V,K> map);

我将程序名称映射到一个整数,表示它们被调用的频率。我想将其反转,以便最终构建一个按调用计数排序的 TreeMap,然后它们是通向一个或多个程序名称的键。

【问题讨论】:

标签: java collections map guava multimap


【解决方案1】:

怎么样:

public static <K,V> Multimap<K,V> invertMap(Map<V,K> map) {
    return Multimaps.invertFrom(Multimaps.forMap(map), ArrayListMultimap.create());
}

这似乎不需要专门的功能。你甚至可以很容易地回到TreeMap

Map<String, Integer> programCounts;
TreeMap<Integer, Collection<String>> map = 
    new TreeMap<>(
        Multimaps.invertFrom(
           Multimaps.forMap(programCounts),
           ArrayListMultimap.create()
        ).asMap()
    );

【讨论】:

  • 但是这不是创建了两张地图,所以会慢一点吗?
  • @Fabian:它创建了一个 Multimap 和一个 TreeMap。它不会创建两个 Multimap; forMap 返回地图的视图
  • 换一种说法:Multimaps.forMap 只是为 programCounts 创建了一个包装器,而且是一个廉价的包装器。这是一个固定时间、固定内存的操作。
猜你喜欢
  • 2011-09-08
  • 2018-01-06
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2012-10-28
  • 2019-01-02
相关资源
最近更新 更多