Сортировка объектов внутри списка ArrayList по значению одного поля данных этих объектов

Рейтинг: 0Ответов: 2Опубликовано: 26.02.2015

Имеется массив:

List<Object> listZakazchik = new ArrayList<>();

в нём лежат объекты (количество динамическое):

new Object(String id, String avatar, String name, int rating)

у которых, к примеру rating = 50, rating = 95, rating = 75, rating = 100 ...

Как я могу отсортировать внутри листа эти объекты (либо создать новый лист), чтобы они в нём были по убыванию данных rating (100, 95, 75, 50)?

Вопрос сложнее: когда будут отсортированы объекты в порядке убывания поля int rating, нужно чтобы дальше шли объекты по значению поля String name /кириллица (если rating уже равен 0)...

Ответы

▲ 5Принят
class MyComparator implements Comparator<Obj> {

        @Override
        public int compare(Obj o1, Obj o2) {
            return Integer.compare(o1.getRating(), o2.getRating());
        }

}
Collections.sort(list, new MyComparator ());

У тебя должен быть геттер того свойства, по которому ты сортируешь. Если я не угадал с порядком - поменяй местами о1 и о2 в методе Integer.compare().

▲ 2

Реализовать в классе интерфейс Comparable:

public class MyClass implements   Comparable<MyClass>{
    [...]
    @Override
    public int compareTo(MyClass other) {
      if(this.rating > other.rating)
        return 1;
      if(this.rating < other.rating)
        return -1;
      return 0;
    }
}

А потом сама сортировка Collections.sort(listZakazchik);