有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

按关系分组的Java排序

我正在编写一个Java程序,在这个程序中,我想对一组项目进行排序,并获取该集合中N个最高的元素。不过,问题是,我希望返回的元素按其排名分组——因此,如果我想要3个最高的元素,但第三位的两个元素之间有一个并列关系,那么第三个结果是一个包含两个并列元素的集合

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


共 (2) 个答案

  1. # 1 楼答案

    这就是我最终要做的:

    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;
        }
    }
    
  2. # 2 楼答案

    听起来Google Collection's MultiMap可能就是你想要的

    在插入元素时,使用“排名”作为键。然后把钥匙分类