【问题标题】:Convert Multiset to a Map将多重集转换为地图
【发布时间】:2014-02-18 14:15:02
【问题描述】:

我必须将 Guava Multiset<String> 转换为 Map<String, Integer>(键、计数)。

我找不到任何实用功能。有什么比我下面的代码更短的吗?

private static Map<String, Integer> multisetToMap(final Multiset<String> multiset) {
    Map<String, Integer> result = new HashMap<>();
    for(String element: multiset.elementSet()) {
        result.put(element, multiset.count(element));
    }
    return ImmutableMap.copyOf(result);
}

【问题讨论】:

  • codereview.stackexchange.com 上发布这个可能会更好。一种观察是使用 ImmutableMap.Builder 而不是填充 HashMap 然后复制它。
  • @PaulBellora Collections.unmodifiableMap() 也是一个选项。

标签: java collections guava


【解决方案1】:

如果你可以使用Eclipse Collections(以前的GS Collections)Bag(相当于Multiset),你可以使用toMapOfItemToCount()的方法。

HashBag<Integer> bag = HashBag.newBagWith(1, 2, 2, 3, 3, 3);
Map<Integer,Integer> map = bag.toMapOfItemToCount();
Assert.assertEquals(UnifiedMap.newWithKeysValues(1, 1, 2, 2, 3, 3), map);

UnifiedMap 是 HashMap 的直接替代品。

注意:我是 Eclipse Collections 的提交者。

【讨论】:

    【解决方案2】:

    确实,没有隐藏的 Guava 功能,而且您所做的基本上是正确的。

    我也没有发现用于执行此操作的功能请求(开放或其他)。但是,如果我们实现了this feature request,您可能还有另一种选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多