Сортировка списка по значению его элемента - PullRequest
2 голосов
/ 28 июля 2011

Как отсортировать список по значению его элемента?

В моем классе модульного теста я получаю список в отсортированной форме по значению одного из его элементов {sortOrder and it has value 1, 2 and 3}, теперь я сравниваю returnedList с expectedList, чтобы убедиться, что оба списка одинаковы и имеют одинаковые элементы в одинаковом порядке.

Пример моего возвращения и ожидаемого списка:

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]

Я не могу использовать какие-либо библиотеки, и этот вопрос относится к Список вопросов для сравнения , есть предложения?

Ответы [ 2 ]

7 голосов
/ 28 июля 2011

используйте это:

 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
    }
 });

Для получения информации о том, как реализовать метод сравнения, посмотрите документацию здесь:

Компаратор

0 голосов
/ 28 июля 2011

Если вы не возражаете против изменения возвращенного списка, у вас есть две опции:

  • Если вы можете изменить объект (у вас есть список), реализуйте Comparable ипереопределите метод compareTo (MyObject).

  • Если вы не можете изменить объект, создайте Comparator и передайте его в метод сортировки.

Если вы не можете изменить список, сделайте что-то вроде этого:

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 ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...