2011-02-25 142 views
0

我遇到的情況,我有兩個的ArrayList排序的ArrayList

ArrayList<String> sortedArrayList 
ArrayList<String> unSortedArrayList 

我有排序unSortedArrayList取決於sortedArrayList。

即,sortedArrayList已經排序,現在基於sortedArrayList,我必須排序unSortedArrayList。

unSortedArrayList size is <= to the size of sortedArrayList. 

是否有Java API?

任何幫助表示讚賞。

+1

你是什麼意思'基於'?你的意思是同一種類型?如果兩個列表的排序方式相同,則可以使用另一個列表並修剪它。 – adarshr 2011-02-25 15:29:38

+4

「基於」是什麼意思?你的意思很不明確。一個例子會非常有幫助。 – 2011-02-25 15:29:56

+3

我想他意味着他想要使用'sortedArrayList'中的元素順序作爲另一個列表的排序順序 – 2011-02-25 15:31:25

回答

0
 List<String> newSortedList = new ArrayList<String>(); 

     for(String currentSortedStr:sortedList){ 

      if(unsortedList.size==0)break; 

      if(unsortedList.remove(currentSortedStr)){ 
       newSortedList.add(currentSortedStr); 
      } 
     } 

如果你的意思@Sam Dufel在評論

說,據我所知,沒有這種情況下,這樣的API方法你可以做這樣的事情。

這是不會照顧重複。刪除將只刪除該對象的第一次出現。在未排序列表大小大於0的情況下,可以說它包含重複項。如果你也需要重複的話,你也可以添加一些代碼來處理這種情況。

或者如果你的意思是正常排序;

Collections.sort(List<T>)將爲您做排序。

這樣做的另一種方式;

Collections.sort(unsortedList,new CustomComparator(sortedList)); 

public class CustomComparator implements Comparator<String>{ 
     private List<String> sortedList; 
     public CustomComparator(List<String> sortedList){ 
      this.sortedList = sortedList; 
     } 

     @Override 
     public int compare(String o1, String o2) { 
      return sortedList.indexOf(o1)-sortedList.indexOf(o2); 
     }  
    } 
+0

感謝您的努力。 – user234194 2011-02-25 16:07:38

+0

由於所有這些「indexOf」調用,執行此操作的另一種方式將非常緩慢。番石榴的方式更好;) – sjr 2011-02-25 16:08:35

+0

不客氣。 – fmucar 2011-02-25 16:13:43

2

據我所知,你有什麼是列表1中的每個元素在表2中的相應元素,並且要整理成「相應的」元素的順序列表2。你最好的方法是創建一個對象包含兩個字符串:

class StringPair { 
    String s1; 
    String s2; 
} 

現在讓StringPairs數組列表和排序是基於S1的價值。

0

雖然你的問題不夠清楚,但我認爲以下幾點對你有幫助。

您可以使用Collections.sort()排序列表。如果你需要一些自定義的修改排序機制實現此方法的自己Comparator並使用2 ARGS版本:Collections.sort(list, comparable)

6

使用Google Guava的優秀Ordering類:

Collections.sort(unSortedArrayList, Ordering.explicit(sortedArrayList)); 

編輯你也可以做

List<whatever> sortedList = Ordering.explicit(sortedArrayList).immutableSortedCopy(unsortedArrayList); 
+0

+1番石榴是純真棒 – 2011-02-25 16:00:37

+0

真的很棒! – sjr 2011-02-25 16:05:04

+0

也是我的+1,如果這個過程值得向類路徑中添加一個新庫 – fmucar 2011-02-25 16:19:01