簡體   English   中英

Java-按關系分組排序

[英]Java - Sorting Grouped by Ties

我正在編寫一個Java程序,其中要對一組項目進行排序並獲得該組中N個最高的元素。 事實是,我希望按元素的排名將元素歸還-因此,如果我希望獲得3個最高的元素,但是兩個元素之間有一個並列第三的位置,則第三個結果是包含以下內容的集合這兩個綁在一起的元素。

我知道我可以自己寫這個,但是我想知道它是否已經在其他地方實現了。 有人知道這樣的事嗎?

聽起來好像您在追求Google Collection的MultiMap

插入元素時,請使用“等級”作為關鍵字。 然后對鍵進行排序。

這就是我最終要進行的工作:

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM