Создайте класс для представления записи счета / имени:
public class ScoreEntry implements Comparable<ScoreEntry> {
public final String name;
public final int score;
public ScoreEntry (String name, int score){
this.name = name;
this.score = score;
}
public int compareTo (ScoreEntry other){
return Integer.signum(score - other.score);
}
}
Затем вы можете поместить их в ArrayList. Внедрив Comparable подобным образом, вы разрешите сортировку списка по баллам.
Возможно, вы захотите включить дату в этот класс, чтобы оценка, полученная на более ранней дате, была выше, чем у другой записи с таким же баллом. ,Вы можете использовать System.nanoTime()
, чтобы получить время, необходимое для создания счета.
public class ScoreEntry implements Comparable<ScoreEntry> {
public final String name;
public final int score;
public final long time;
public ScoreEntry (String name, int score, long time){
this.name = name;
this.score = score;
this.time = time;
}
public int compareTo (ScoreEntry other){
if (score == other.score)
return Long.signum(other.time - time);
return Integer.signum(score - other.score);
}
}
Редактировать: Если вы хотите сортировать другими способами, вам нужен собственный компаратор. Я адаптировал это из этого ответа , который учитывает заглавные буквы.
Comparator<ScoreEntry> nameComparator = new Comparator<>(){
public int compare(ScoreEntry first, ScoreEntry second) {
int res = String.CASE_INSENSITIVE_ORDER.compare(first.name, second.name);
if (res == 0)
res = first.name.compareTo(second.name);
return res;
}
}
Затем вы передадите это методу сортировки:
Collections.sort(scoresList, nameComparator);