将Multiset Count转换为List Java

时间:2015-03-26 01:12:58

标签: java processing guava multiset

有没有办法将计数从Multiset拉到列表中?

String[] data = loadStrings("data/data.txt"); 

Multiset<String> myMultiset = ImmutableMultiset.copyOf(data);

for (String word : Multisets.copyHighestCountFirst(myMultiset).elementSet()) {
    System.out.println(word + ": " + myMultiset.count(word));
    // ...
}

目前我可以在Processing中将最常出现的单词输出到控制台中。我想知道是否可以将相应的单词及其计数添加到数组或列表中。我试过这样:

for (String word : Multisets.copyHighestCountFirst(myMultiset).elementSet()) {
    float a[] = myMultiset.count(word);
}

但仅收到错误消息,指出我无法将int转换为float[]

这甚至可能吗?我错了吗?我之前从未使用Multiset,因此任何帮助都非常有用

更新: 我用它来获取最高计数的副本,但无法将其转换为列表。

Multiset<String> sortedList = Multisets.copyHighestCountFirst(myMultiset);

1 个答案:

答案 0 :(得分:2)

请参阅Multiset.entrySet() docs

  

返回此multiset内容的视图,该视图分组为Multiset.Entry实例,每个实例提供multiset的元素和该元素的计数。

所以,即为了获得前5名最多的人,我会绕过entrySet()

ImmutableMultiset<String> top = Multisets.copyHighestCountFirst(myMultiset);

Iterator<Multiset.Entry<String>> it = top.entrySet().iterator();

for (int i = 0; (i < 5) && it.hasNext(); i++) {
    Multiset.Entry<String> entry = it.next();

    String word = entry.getElement();
    int count = entry.getCount();

    // do something fancy with word and count...
}

我假设您需要显示前5个最常出现的单词及其频率。如果您只需要单词,只需使用asList()方法:

ImmutableMultiset<String> top = Multisets.copyHighestCountFirst(myMultiset);

ImmutableList<String> list = top.asList();

并迭代list以获得前5个元素。