如何根据元素值对列表进行排序?
在我的单元测试类中,我正在接收基于其元素值{sortOrder and it has value 1, 2 and 3}
之一的排序形式的列表,现在我将returnedList
与expectedList
进行比较以确保两者都有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有关,有什么建议吗?
答案 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
}
});
有关如何实施比较方法的信息,请查看此处的文档:
答案 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()方法。