Самое простое изменение в вашем анонимном классе - использование переменной:
String key = "racesWon";
Comparator<Player> RacesWon = new Comparator<Player>() {
public int compare(Player p1, Player p2) {
Integer p1GamesWon = Integer.valueOf(p1.stats.get(key));
Integer p2GamesWon = Integer.valueOf(p2.stats.get(key));
return p2GamesWon.compareTo(p1GamesWon);
}
};
Вам просто нужно быть осторожным, поскольку ваш компаратор может застрять с ключом.Лучшее место для создания вышеуказанного компаратора - метод, который устанавливает ключ.
Существуют функциональные способы создания этого компаратора, которые делают ваш код еще более лаконичным:
String key = "racesWon";
Comparator<Player> c =
Comparator.comparingInt(p -> Integer.parseInt(p.stats.get(key)));
//yet another way:
Comparator<Player> ccc =
Comparator.comparing(player -> Integer.valueOf(player.stats.get(key)),
Integer::compare);