Java - сортировка, сгруппированная по связям - PullRequest
0 голосов
/ 22 мая 2011

Я пишу Java-программу, в которой хочу отсортировать набор элементов и получить N-максимальные элементы набора.Дело в том, что я хочу, чтобы элементы возвращались сгруппированными по их рангу - поэтому, если я хочу, чтобы 3 старших элемента были связаны, но есть связь между двумя элементами за третье место, то третий результат - это коллекция, которая содержитдва связанных элемента.

Я знаю, что мог бы написать это сам, но мне интересно, реализовано ли это где-то еще.Кто-нибудь знает что-нибудь подобное?

Ответы [ 2 ]

0 голосов
/ 30 мая 2011

Вот что я закончил:

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;
    }
}
0 голосов
/ 22 мая 2011

Похоже, что MultiMap * Коллекции Google * может быть тем, что вам нужно.

Используйте «rank» в качестве ключа при вставке элементов.Затем сортируйте ключи.

...