将Multiset转换为地图

时间:2014-02-18 14:15:02

标签: java collections guava

我必须将Guava Multiset<String>转换为Map<String, Integer>(Key,Count)。

我找不到任何实用功能。有没有比我下面的代码短的内容呢?

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);
}

2 个答案:

答案 0 :(得分:2)

如果你可以使用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的提交者。

答案 1 :(得分:1)

事实上,没有隐藏的番石榴功能,你做的基本上是正确的。

我没有发现功能请求(打开或以其他方式)正是这样做。但是,如果我们实施this feature request,您可能会有另一种选择。