-5

プレイヤー名とポイント数を含む HighScores.txt というファイルがあります。

name1 2
name2 5
name3 1
name4 23
name5 51

そして、このファイルの内容を読み取り、各行を分割して ArrayList に追加する私のコードを次に示しますhighScores

public class fileHandling {

    static ArrayList highScores = new ArrayList();


    public static void readFile(String[] args) throws Exception {

        File file = new File(fileHandling.class.getClassLoader()
                .getResource("HighScores.txt").getPath());

        Scanner read = new Scanner(file);

        while (read.hasNextLine()) {
            String line = read.nextLine();
            String[] result = line.split("\\s+");
            highScores.add(Arrays.toString(result));
            System.out.println(highScores);

        }
    }

}

この ArrayList を各プレイヤーのポイント数で並べ替えるにはどうすればよいですか?

つまり、新しい配列リストは次のようになります。

[[name5, 51], [name4, 23], [name2, 5], [name1, 2], [name3, 1]]
4

2 に答える 2

3

ファイル内の行ごとに個別のオブジェクトを作成し、ComparableまたはComparatorインターフェイスを使用してこれらのオブジェクトを並べ替えることができます。次に、を使用しますCollections.sort(arrayList,sorter)。ユーザー定義オブジェクトをソートするための優れたチュートリアルをここで見つけることができます。

同じためのクラスは

public class Player{
     private String name;
     private Integer score;

     //getters and setters here
}

Player次に、次のようにオブジェクトのソーターを作成します。

public class ScoreSort implements Comparator<Player>{
    public int compareTo(Player first, Player second){
            // implement sorting logic here

    }
}

次に、を使用しますCollections.sort(playerList, new ScoreSort())。次のリンクで良いチュートリアルを見つけることができます

http://www.thejavageek.com/2013/06/17/sorting-user-defined-objects-part-2/

于 2013-07-07T16:59:55.057 に答える
2

2 つのメンバー変数名とスコアを持つクラスを作成します。ファイル内のエントリごとにクラスの新しいインスタンスを作成し、ArrayList. Comparableこのクラスは、スコアに基づいて比較するインターフェースも実装する必要があります。今すぐ使用Collections.sort

于 2013-07-07T17:00:25.587 に答える