我必须将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);
}
答案 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,您可能会有另一种选择。