排序arrayLists

时间:2011-02-25 15:28:18

标签: java arraylist

我有一个场景,我有两个ArrayLists

ArrayList<String> sortedArrayList
ArrayList<String> unSortedArrayList

我必须根据sortedArrayList排序unSortedArrayList。

即,sortedArrayList已经排序,现在基于sortedArrayList,我必须对unSortedArrayList进行排序。

unSortedArrayList size is <= to the size of sortedArrayList.

是否有Java API?

感谢任何帮助。

4 个答案:

答案 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)