osh*_*hai 7 java collections guava
是否有一些技巧可以转换HashMultiset<String>
为Map<String,Integer>
,除了迭代所有条目Set
?
更新:整数应表示多集中的字符串数.
Luk*_*tor 13
您可以使用Maps.asMap.使用lambda表达式(Java 8),它将是一个单行:
Maps.asMap(multiset.elementSet(), elem -> multiset.count(elem));
Run Code Online (Sandbox Code Playgroud)
在Java 7及以下版本中:
final Multiset<String> multiset = HashMultiset.create();
Map<String, Integer> freqMap = Maps.asMap(multiset.elementSet(),
new Function<String, Integer>() {
@Override
public Integer apply(String elem) {
return multiset.count(elem);
}
});
Run Code Online (Sandbox Code Playgroud)
更新到java 8,这是我发现的最佳答案(基于其他答案):
public static <E> Map<E, Integer> convert(Multiset<E> multiset) {
return multiset.entrySet().stream().collect(
Collectors.toMap(x->x.getElement(),x->x.getCount()));
}
Run Code Online (Sandbox Code Playgroud)
或者:
public static <E> Map<E, Integer> convert(Multiset<E> multiset) {
return multiset.entrySet().stream().collect(
Collectors.toMap(Entry::getElement,Entry::getCount));
}
Run Code Online (Sandbox Code Playgroud)