Как отсортировать HashMap на основе значений в порядке убывания? - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь отсортировать HashMap на основе значений , чтобы он упорядочился в в порядке убывания . Но я понятия не имею, как это реализовать. Как мне это сделать?

HashMap<K, Integer> keysAndSizeMap = new HashMap<>();

for (K set : map.keySet()) {
     keysAndSizeMap.put(set, map.get(set).size());
}

// implementation here?

System.out.println("keysAndSizeMap: " + keysAndSizeMap);

Пример результата, который я хочу:

  • ввод: {800=12, 90=15, 754=20}
  • вывод: {754=20, 90=15, 800=12}

-или-

  • ввод: {"a"=2, "b"=6, "c"=4}
  • вывод: {"b"=6, "c"=4, "a"=2}

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Это один из способов сортировки карты по значениям с помощью API потоков.Обратите внимание, что полученная карта представляет собой LinkedHashMap в порядке убывания ее значений.

Map<Integer, Integer> map = new HashMap<>();
map.put(1, 10);
map.put(12, 3);
map.put(2, 45);
map.put(6, 34);
System.out.println(map);

LinkedHashMap<Integer, Integer> map2 = 
    map.entrySet()
       .stream()             
       .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
       .collect(Collectors.toMap(e -> e.getKey(), 
                                 e -> e.getValue(), 
                                 (e1, e2) -> null, // or throw an exception
                                 () -> new LinkedHashMap<Integer, Integer>()));

System.out.println(map2);

Входные данные : {1=10, 2=45, 6=34, 12=3}
Выходные данные : {2=45, 6=34, 1=10, 12=3}

0 голосов
/ 12 апреля 2019

Вы можете использовать TreeSet с пользовательскими компараторами для сортировки записей и потоков Java 8 для создания отсортированной карты.

TreeSet<Entry<T, Integer>> sortedEntrySet = new TreeSet<Entry<T, Integer>>((e1, e2) -> e2.getValue() - e1.getValue());
sortedEntrySet.addAll(keysAndSizeMap.entrySet());
Map<T, Integer> sortedMap = sortedEntrySet.stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...