2011-05-22 59 views
0

我正在寫一個Java程序,我想在其中排序一組項目並獲得該組的N個最高元素。但事情是,我希望元素按照他們的級別進行分組 - 所以如果我想要3個最高元素,但是對於第三個元素有兩個元素之間的聯繫,那麼第三個結果是一個集合,它包含兩個並列的元素。Java - 排序分組

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

回答

0

這是我結束了去:

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

聽起來像Google Collection's MultiMap可能是你以後。

插入元素時使用「rank」作爲您的鍵。然後對鍵進行排序。

+0

這是行不通的,因爲排序完成之前的每個對象的「等級」是未知的。這是由排序決定的,而不是其他方式。 – Masterofpsi 2011-05-23 01:17:42

+0

啊我明白了。那時我什麼都不知道。 我會做一個自定義的實現,將它們粘在一個列表中,對它們進行排序,然後走過創建所需的數據結構 - 可能使用MultiMap。 – Jim 2011-05-23 20:55:28