一个 谷歌集合 多集 是的元素各自有着数(即可能是本多次)。

我不能告诉你多少次我想要做如下

  1. 做出的直方图(确切地多集)
  2. 获得最多的N元计从的直方图

实例:前10网址(通过#次提到),前10标签(通过#次应用),...

什么是规范的方式来做到#2给出一个谷歌收藏品多集?

在这里, 是一个博客的文章有关,但该代码不是相当什么我想要的。第一,返回的一切,不只是顶部N.第二,这份(是否有可能避免复制?).第三,我常常想要一个确定性进行排序,即抢七如果计数是平等的。其他尼特:它不是静态的,等等。

有帮助吗?

解决方案

我写方法的基本功能你要求,除了它们执行副本和缺乏确定性的领带破坏的逻辑。他们目前的内部谷歌,但我们可以开放源码他们在某一点。这番石榴 的问题 有方法的签名。

他们的算法是相似的博客的员额:排序的名单条目。它会更快,但更复杂的,要使用一个更好的 选择算法.

编辑:由于石榴11,这是 实施

其他提示

给另一个角度对人发表意见,我将发布一个略微的修改版本的博客后我引用:

package com.blueshiftlab.twitterstream.summarytools;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multiset;
import com.google.common.collect.Ordering;
import com.google.common.collect.Multiset.Entry;

public class Multisets {
    // Don't construct one
    private Multisets() {
    }

    public static <T> ImmutableList<Entry<T>> sortedByCount(Multiset<T> multiset) {
        Ordering<Multiset.Entry<T>> countComp = new Ordering<Multiset.Entry<T>>() {
            public int compare(Multiset.Entry<T> e1, Multiset.Entry<T> e2) {
                return e2.getCount() - e1.getCount();
            }
        };
        return countComp.immutableSortedCopy(multiset.entrySet());
    }

    public static <T> ImmutableList<Entry<T>> topByCount(Multiset<T> multiset,
            int max) {
        ImmutableList<Entry<T>> sortedByCount = sortedByCount(multiset);
        if (sortedByCount.size() > max) {
            sortedByCount = sortedByCount.subList(0, max);
        }

        return sortedByCount;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top