У меня есть собственный класс под названием «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));
}
Я хочу отсортировать от самого высокого до самого низкого балла.
Связано: Как отсортировать List<Object> по алфавиту




Вы можете передать пользовательскую функцию сравнения для сортировки:
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, чтобы это работало!
Где код для сортировки?