2011-02-25 177 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