2014-11-24 5 views
0

Я читаю оценки игр из текстового файла в ArrayList. Каждый элемент массива ArrayList представляет собой массив String с двумя индексами, один хранит имя игрока, а другой - счет.Сортировка массива Список массивов

Каков наилучший способ отсюда сортировать список в числовом порядке по счету, чтобы показывать высокие баллы?

Спасибо!

+0

Что вы имеете в виду "лучше"? Есть много способов, некоторые простые, некоторые сложные, все из них по сравнению с использованием встроенного сортировщика, такого как Collections.sort –

+3

, вы можете использовать 'Collections.sort()' и написать свой собственный «компаратор». – BatScream

+0

@ Mike'Pomax'Kamermans Я имел в виду простейший, я думаю. Как я могу использовать Collections.sort здесь? – cogm

ответ

3

Это должно выглядеть примерно так, если предположить, что оценка хранится в индексе 1:

Collections.sort(playerList, new Comparator<String[]>(){ 
    @Override 
    public int compare(String[] player1, String[] player2) { 
     return Integer.parseInt(player1[1]) - Integer.parseInt(player2[1]); 
    } 
} 

playerList список ваших массивов. Этот метод сортирует список массивов для вас, используя предоставленный объект Comparator, который, как вы видите, берет два элемента из массива ArrayList и предоставляет метод определения того, какой из них является первым.

3

Если вы не вынуждены использовать массив для хранения оценки, я рекомендую использовать для него выделенный класс модели, который реализует интерфейс Comparable.

public class Score implements Comparable<Score> { 
    final String name; 
    final int score; 

    public Score(String name, int score) { 
     this.name = name; 
     this.score = score; 
    } 

    @Override 
    public int compareTo(final Score that) { 
     return that.score - this.score; 
    } 

    @Override 
    public String toString() { 
     return String.format("Score[name=%s, score=%d]", name, score); 
    } 
} 

Текущая реализация сортирует descending. Если вы хотите сортировать ascending, тогда измените его на return this.score - that.score;.

Вы можете использовать этот класс, как это:

public static void main(String[] args) { 
    final List<Score> scores = new ArrayList<>(); 
    scores.add(new Score("Mike", 100)); 
    scores.add(new Score("Jenny", 250)); 
    scores.add(new Score("Gary", 75)); 
    scores.add(new Score("Nicole", 110)); 

    Collections.sort(scores); 

    for (final Score score : scores) { 
     System.out.println(score); 
    } 
} 

Выход будет:

Score[name=Jenny, score=250] 
Score[name=Nicole, score=110] 
Score[name=Mike, score=100] 
Score[name=Gary, score=75] 
Смежные вопросы