Используйте отсортированную коллекцию, такую как TreeMap
, которая сохраняет свои записи (отображения значений ключа) в натуральном порядке их ключей. Поскольку вы хотите сортировать по лучшим баллам, сохраняйте свои баллы как ключи и игроки в качестве их значений.
Очень вероятно, что у двух или более игроков могут быть одинаковые высокие баллы. Таким образом, вместо отображения счета на игрок, мы должны сопоставить его с 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());
Этот код даже не компилируется. Вам не хватает ссылочного типа для переменной цикла. –
Отредактировано сейчас, работает. –