【问题标题】:Converting Multiset Count into a List Java将多集计数转换为列表 Java
【发布时间】:2015-05-29 22:26:29
【问题描述】:

有没有办法将计数从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[]

这甚至可能吗?我做错了吗?我以前从未使用过Multisets,所以任何帮助都会非常有用

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

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

【问题讨论】:

    标签: java processing guava multiset


    【解决方案1】:

    请看Multiset.entrySet() docs:

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

    因此,即要获得前 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 个元素。

    【讨论】:

    • 哇,感谢您抽出宝贵时间 :),您认为使用地图可能更容易吗?
    • 这样做的主要原因是我认为以这种方式在条形图中表示值会很容易......
    • @Nebbyyy 我认为您可以完美地使用地图。只需使用LinkedHashMap,因为它保留了插入顺序。这样,您将首先获得最上面的单词,然后是第二个最上面的单词,等等。只需使用 X 轴的键(保存单词)和 Y 轴的值(保存频率)。我将编辑我的答案,以便明确应该使用 LinkedHashMap
    • 没有什么是地图可以做的,你不能直接使用Multiset。如果您想保留插入顺序,请使用 LinkedHashMultiset -- 或者继续使用 copyHighestCountFirst 返回的多重集而不复制它。老实说,复制它似乎毫无意义。
    • 没有该集合的直接视图,但您真正想用它做什么?例如你总是可以遍历entrySet,你可以很容易地得到总数等,以及你需要的实际直方图的所有其他内容。
    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多