Java - сортировка сгруппирована на связи
Вопрос
Я пишу программу Java, в которой я хочу сортировать набор элементов и получить N-самые высокие элементы набора.Дело в том, что я хочу, чтобы элементы были возвращены сгруппированы по их званию - поэтому, если я хочу 3 самых высоких элемента, но есть связь между двумя элементами для третьего места, то третий результат - это коллекция, которая содержитдва связанных элемента.
Я знаю, что могу написать это сам, но мне интересно, если бы уже было реализовано где-то еще.Кто-нибудь знает о чем-то вроде этого?
Решение 2
Это то, что я закончил:
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;
}
}
. Другие советы
Звучит как joglecode.com/svn/common/collect/google/common/collect/google/Common/collect/google/Common/Collect/google/Common/collect/google/Common/COLLECT/COGLE_COLMMON/COLLECT/MULDIMAP/COMMOL/COLLECT/MULTIMOP/COMMON/COLLECT/MULLIMAP.HTML/COLLECT/MULLIMAP.HTML" rel="nofollow"> MultiMap коллекции Google может быть тем, что вы после.
Используйте «ранг» в качестве ключа при вставке элементов.Затем сортируйте ключи.