Как сортировать HashMap, значения являются целыми числами. Я хочу отсортировать от высшего к низшему [дубликат]

avatar
Aly Mohamed
8 августа 2021 в 17:27
128
1
1

Итак, мне нужно отсортировать хэш-карту "счетов". макет хэш-карты - HashMap<Player, Integer (это счет, который мне нужно отсортировать>

если вы спрашиваете почему? потому что мне нужно составить таблицу лидеров.

вот мой код:

public static Player[] sortPlayersByElo() {
        Map<String, Object> map = RankingConfig.get().getConfigurationSection("data").getValues(false);
        Map<Player, Integer> eloMap = new HashMap<>(); // Here is the map i need to sort.
        for (String s : map.keySet()) {
            Player player = Bukkit.getPlayer(s);
            eloMap.put(player, RankingConfig.get().getInt("data."+s+".elo"));
        }
        
        Player[] players = new Player[eloMap.size()];

        return players;
    }
Источник
dominicoder
8 августа 2021 в 17:32
0

Вы пробовали это: google.com/search?q=java+sort+hashmap

Aly Mohamed
8 августа 2021 в 17:32
0

лол, ничего не работает

dominicoder
8 августа 2021 в 17:35
0

Вам нужно объяснить, в чем состоит то, что вы пытались прийти к выводу, что «ничего не работает».

Aly Mohamed
8 августа 2021 в 17:39
0

Использование древовидной карты

Aly Mohamed
8 августа 2021 в 17:54
0

На мой вопрос уже ответили. Спасибо за вашу помощь в любом случае.

Ответы (1)

avatar
Unmitigated
8 августа 2021 в 17:33
4

Вы можете использовать Comparator.comparingInt для сортировки в правильном порядке. Потоки можно использовать для сортировки и сбора новых Map в LinkedHashMap для сохранения нового порядка.

Map<Player, Integer> result = eloMap.entrySet().stream()
    .sorted(Comparator.comparingInt(Map.Entry::getValue))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, 
         (a,b)->b, LinkedHashMap::new));