如何将HashMultiset <String>转换为Map <String,Integer>

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)


osh*_*hai 5

更新到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)