我正在寫一個Java程序,我想在其中排序一組項目並獲得該組的N個最高元素。但事情是,我希望元素按照他們的級別進行分組 - 所以如果我想要3個最高元素,但是對於第三個元素有兩個元素之間的聯繫,那麼第三個結果是一個集合,它包含兩個並列的元素。Java - 排序分組
我知道我可以自己寫這個,但我想知道它是否已經在其他地方實施過。有人知道這樣的事嗎?
我正在寫一個Java程序,我想在其中排序一組項目並獲得該組的N個最高元素。但事情是,我希望元素按照他們的級別進行分組 - 所以如果我想要3個最高元素,但是對於第三個元素有兩個元素之間的聯繫,那麼第三個結果是一個集合,它包含兩個並列的元素。Java - 排序分組
我知道我可以自己寫這個,但我想知道它是否已經在其他地方實施過。有人知道這樣的事嗎?
這是我結束了去:
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;
}
}
聽起來像Google Collection's MultiMap可能是你以後。
插入元素時使用「rank」作爲您的鍵。然後對鍵進行排序。
這是行不通的,因爲排序完成之前的每個對象的「等級」是未知的。這是由排序決定的,而不是其他方式。 – Masterofpsi 2011-05-23 01:17:42
啊我明白了。那時我什麼都不知道。 我會做一個自定義的實現,將它們粘在一個列表中,對它們進行排序,然後走過創建所需的數據結構 - 可能使用MultiMap。 – Jim 2011-05-23 20:55:28