Сортировка ArrayList объектов по атрибуту объекта - PullRequest
7 голосов
/ 27 июля 2010

У меня есть Массив объектов.Эти объекты имеют атрибут или тип данных - «Строка».Мне нужно отсортировать Arraylist по этой строке.Как этого добиться?

Ответы [ 2 ]

13 голосов
/ 27 июля 2010

Вам нужно написать Comparator<MyObject> и использовать Collections.sort(List<T>, Comparator<? super T> для сортировки вашего List.

Или ваш MyObject также можетimplements Comparable<MyObject>, определяющий естественный порядок , который сравнивается с вашим конкретным атрибутом, а затем вместо него используется Collections.sort(List<T>.

См. Также

Смежные вопросы

О сортировке List по различным критериям:

Вкл. Comparator и Comparable

6 голосов
/ 31 августа 2010

Еще один хороший способ сделать это немного более гибким, если существует более одного свойства объекта, по которому вы, возможно, захотите отсортировать, - это использовать Guava Порядок класс с его onResultOf(Function) опцией.Это идеально подходит для сортировки по свойствам, поскольку Функция может использоваться для извлечения и возврата определенного свойства объекта.В качестве простого примера представьте класс Person с методами String getFirstName() и String getLastName().

List<Person> people = ...;
Collections.sort(people, Ordering.natural().onResultOf(
    new Function<Person, String>() {
      public String apply(Person from) {
        return from.getFirstName();
      }
    }));

Выше приведен список, отсортированный по имени.

Чтобы он читалсялучше, вы можете определить функции, которые вы можете использовать в качестве полей public static final в классе Person.Затем вы можете отсортировать по фамилии следующим образом:

Collections.sort(people, Ordering.natural().onResultOf(Person.GET_LAST_NAME));

Как забавное примечание, все это будет намного проще в Java 8 с лямбда-выражениями и ссылками на методы.Вы сможете написать что-то вроде этого без необходимости определять какие-либо неуклюжие анонимные внутренние классы или статические конечные поля:

import static java.util.Comparator.comparing;
...

people.sort(comparing(Person::getLastName));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...