根据元素的值对列表进行排序

时间:2011-07-28 01:49:25

标签: java list sorting collections

如何根据元素值对列表进行排序?

在我的单元测试类中,我正在接收基于其元素值{sortOrder and it has value 1, 2 and 3}之一的排序形式的列表,现在我将returnedListexpectedList进行比较以确保两者都有list是相同的,并且具有相同顺序的相同元素。

我的回归和预期清单的示例:

expected List = [Code: ANALYST, SortOrder: 2, Code: STREET, SortOrder: 1]

returned List = [Code: STREET, SortOrder: 1, Code: ANALYST, SortOrder: 2]

那么我如何对SortOrder上的列表进行排序,以便我的预期列表变为:

expected List = [Code: STREET, SortOrder: 1, Code: ANALYST, SortOrder: 2]

我无法使用任何图书馆这个问题与Compare List Question有关,有什么建议吗?

2 个答案:

答案 0 :(得分:7)

使用它:

 public static void sort(List list, Comparator c)

所以做这样的事情:

Collections.sort(myList, myComparator)

myComparator是一个接口,您只需要实现一个比较方法:

public int compare(Object o1, Object o2)

所以你可以用一个匿名的内部类来做到这一点:

Collections.sort(myList, new Comparator<MyType>(){ 
    public int compare(MyType o1, MyType o2) { 
        //My implementation
    }
 });

有关如何实施比较方法的信息,请查看此处的文档:

Comparator

答案 1 :(得分:0)

如果您不介意修改返回的列表,您有两个选择:

  • 如果您可以修改对象(您有一个列表),请实现Comparable并覆盖compareTo(MyObject)方法。

  • 如果您无法修改对象,请创建一个Comparator并将其传递给您的sort方法。

如果您无法修改列表,请执行以下操作:

List<MyObject> newList = new ArrayList<MyObject>();
newList.addAll(reterunedList);
newList.removeAll(expectedList);
// check here (newList.size() > 0 ?)
expectedList.removeAll(returnedList);
// check here (expectedList.size() > 0 ?)

如果这两个检查中的任何一个列表中还有任何内容,则表示您的列表不同。而且您还没有修改退回的列表。它要求您的MyObject正确实现equals()方法。