Как правильно отсортировать мой ArrayList?

У меня есть собственный класс под названием «ergebnisse» с несколькими полями, одно из них — счет типа Long.

Я хочу отсортировать ArrayList<ergebnisse> по количеству баллов. Я пробовал много вещей, но большинство из них занимают одну или две колонки.

ArrayList<ergebnisse> list = new ArrayList<ergebnisse>();
Cursor data = mDatabaseHelper.fetchNamesByConstraint(filter);
while(data.moveToNext()){
    //get the value from the database in column 1
    //then add it to the ArrayList
    String name = data.getString(1);
    String scorestring = data.getString(2);
    Long score=Long.parseLong(scorestring);
    String timestring = data.getString(3);
    Double time= Double.parseDouble(timestring);
    String mode = data.getString(5);
    String game = data.getString(4);
    String levstring = data.getString(6);
    Integer lev=Integer.parseInt(levstring);
    list.add(new ergebnisse(name,score,time,mode,lev,game));
}

Я хочу отсортировать от самого высокого до самого низкого балла.

Где код для сортировки?

Nicholas K 25.01.2019 19:42

Связано: Как отсортировать List<Object> по алфавиту

Bö macht Blau 25.01.2019 19:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
127
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете передать пользовательскую функцию сравнения для сортировки:

Collections.sort(
    list,
    (a, b) -> Integer.compare(b.score, a.score)
);

Вы заметите, что b.score является первым аргументом Integer.compare. Это меняет смысл сравнения, так что список будет в порядке убывания.

Например, если у нас есть класс:

  private class Person{
    private String name;
    private Long score;
  }

Тогда мы можем сравнить как:

list.sort(Comparator.comparing(Person::getScore));

или

list.sort((person1, person2) -> person1.getScore().compareTo(person2.getScore()));
Ответ принят как подходящий

Это можно сделать разными способами.

Способ 1 (традиционный):

ваш собственный класс

public class Ergebnisse {

    private String name;
    private Long score;

   //standard getters and setters
}

реализовать интерфейс компаратора, переопределив метод сравнения

class SortbyScore implements Comparator<Ergebnisse> { 
    @Override
    public int compare(Ergebnisse a, Ergebnisse b) { 
    return b.getScore() - a.getScore(); 
    } 
} 

Затем, когда вы хотите, чтобы список был отсортирован по счету, используйте

Collections.sort(list, new SortbyScore());

Способ 2 (Java 8 или выше):

Просто используйте лямбда-выражение

list.sort((o1, o2) -> o2.getScore().compareTo(o1.getScore()));

*Обратите внимание, что важно использовать класс-оболочку примитивного типа long(Long) для хранения переменной score, чтобы это работало!

Другие вопросы по теме