2011-01-27 33 views
0

在我的應用程序中,我需要按照請求的順序保留結果集合(用戶發送他想要的列表,並且希望以相同的順序回答他)。集合之間的複製順序

數據,我將發送給用戶的內容由底層生成,他們既不知道正確的順序,也不生成有序的結果。所以我必須自己訂購。

我的方法如下,但我認爲沒有必要實施它,因爲應該有一些標準的方法。那麼,你會推薦什麼?

public class KeepOrder { 

/** 
* Knows how to extract A from B. 
* 
* @param <A> 
* @param <B> 
*/ 
public interface Extractor<A, B> { 

    A extract(B from); 

} 

@SuppressWarnings("serial") 
public static <T, F> Collection<T> keepOrder(final Collection<T> data, final Collection<F> order, 
     final Extractor<F, T> extractor) { 

    final Comparator<T> tComparator = new Comparator<T>() { 

     @Override 
     public int compare(final T o1, final T o2) { 

      final F field1 = extractor.extract(o1); 
      final F field2 = extractor.extract(o2); 

      for (final F currentField : order) { 
       if (currentField.equals(field1) && currentField.equals(field2)) { 
        return 0; 
       } 

       if (currentField.equals(field1)) { 
        return -1; 
       } 

       if (currentField.equals(field2)) { 
        return 1; 
       } 
      } 

      return 0; 
     } 
    }; 

    return new TreeSet<T>(tComparator) { 
     { 
      addAll(data); 
     } 
    }; 

} 

}

+0

爲什麼不只是重寫compareTo? – jzd 2011-01-27 13:42:33

+0

.compareTo()你的意思是什麼類? 沒有.compareTo() – 2011-01-27 13:57:42

回答

5

如果訂單是您的收藏重要的是,你應該限制自己List秒。

the documentation of List

有序的collection(也稱爲序列)。該接口的用戶可以精確控制每個元素在列表中的插入位置。用戶可以通過整數索引(列表中的位置)訪問元素,並搜索列表中的元素。