我有一个场景,我有两个ArrayLists
ArrayList<String> sortedArrayList
ArrayList<String> unSortedArrayList
我必须根据sortedArrayList排序unSortedArrayList。
即,sortedArrayList已经排序,现在基于sortedArrayList,我必须对unSortedArrayList进行排序。
unSortedArrayList size is <= to the size of sortedArrayList.
是否有Java API?
感谢任何帮助。
答案 0 :(得分:6)
使用Google Guava优秀的Ordering课程:
Collections.sort(unSortedArrayList, Ordering.explicit(sortedArrayList));
编辑您也可以
List<whatever> sortedList = Ordering.explicit(sortedArrayList).immutableSortedCopy(unsortedArrayList);
答案 1 :(得分:2)
据我所知,列表1中的每个元素在列表2中都有一个对应的元素,并且您希望列表2按照“对应”元素的顺序排序。您最好的方法是创建一个包含两个字符串的对象:
class StringPair {
String s1;
String s2;
}
现在创建一个StringPairs数组列表,并根据s1的值对其进行排序。
答案 2 :(得分: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方法。
这不会照顾重复。 remove将仅删除该对象的第一个出现。如果未排序的列表大小大于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);
}
}
答案 3 :(得分:0)
虽然您的问题不够明确,但我认为以下内容对您有所帮助。
您可以使用Collections.sort()
对列表进行排序。如果您需要对排序机制进行一些自定义修改,请实现您自己的Comparator
并使用此方法的2个args版本:Collections.sort(list, comparable)