0

我正在编写一个 Java 程序,我想在其中对一组项目进行排序并获取该集合中最高的 N 个元素。但问题是,我希望返回的元素按它们的等级分组——所以如果我想要 3 个最高的元素,但两个元素之间存在并列第三名,那么第三个结果是一个包含两个捆绑的元素。

我知道我可以自己写这个,但我想知道它是否已经在其他地方实现了。有人知道这样的事情吗?

4

2 回答 2

0

听起来Google Collection 的 MultiMap可能就是您所追求的。

插入元素时,使用“等级”作为键。然后对键进行排序。

于 2011-05-22T12:27:24.783 回答
0

这就是我最终的结果:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.common.collect.Ordering;

public final class Sorting {
    private Sorting() {}

    public static <T extends Comparable<? super T>> List<List<T>> rank(
            Iterable<T> iterable, int nRanks) {
        if (nRanks < 0) {
            throw new IllegalArgumentException(Integer.toString(nRanks));
        }
        if (nRanks == 0) {
            return new ArrayList<List<T>>();
        }

        Iterator<T> iter = Ordering.natural().sortedCopy(iterable).iterator();
        List<List<T>> ret = new ArrayList<List<T>>();
        if (iter.hasNext()) {
            T prev = iter.next();
            List<T> group = new ArrayList<T>();
            group.add(prev);
            ret.add(group);

            int rank = 1;
            while (iter.hasNext()) {
                T next = iter.next();
                if (prev.compareTo(next) > 0) {
                    rank++;
                    if (rank > nRanks) {
                        break;
                    }

                    group = new ArrayList<T>();
                    ret.add(group);
                }
                group.add(next);
                prev = next;
            }
        }

        return ret;
    }
}
于 2011-05-29T23:12:27.427 回答