TreeMap
エントリ (キーと値のマッピング) をキーの自然な順序で保持するような、並べ替えられたコレクションを使用します。ハイスコアでソートしたいので、スコアをキーとして、プレーヤーを値として保持します。
2 人以上のプレイヤーが同じハイ スコアを持つ可能性は非常に高いです。そのため、スコアをプレーヤーにマッピングする代わりに、List
(同じ高スコアを持つ)プレーヤーにマッピングする必要があります。
// {key - value} = {high score - {list, of, players}}
TreeMap<Integer, List<Client>> highestScores =
new TreeMap<Integer, List<Client>>();
for (Client client : getPlayers()) {
List<Client> playerList = null;
// make gameScore private
Integer score = client.getGameScore(); // using getters() recommended
// check if a player with this score already exists
if ((playerList = highestScores.get(score)) == null) { // if NOT,
playerList = new ArrayList<Client>(1); // CREATE a new list
playerList.add(client);
highestScores.put(score, playerList);
} else { // if YES, ADD to the existing list
playerList.add(client);
}
}
すべてのハイスコアを反復するには、次を使用します
for (Integer score : highestScores.descendingKeySet()) {
for (Client player : highestScores.get(score)) { // iterate over player list
System.out.println(player.getName() + ": " + score); // assuming "name" property
}
}
最高得点を直接印刷するには
Map.Entry<Integer, List<Client>> highest = highestScores.lastEntry();
System.out.println(highest.getKey() + " : " + highest.getValue());