Простые и понятные примеры сортировки Map по значениям с использованием Java 8 Stream APIs в порядке возрастания и убывания(обратном). В центре логики находится метод Map.Entry.comparingByValue(), который сравнивает записи карты в естественном порядке по значениям записей.
1. Карта.Запись.сравнениеПоЗначению()
В Java 8 класс Map.Entry имеет статический метод comparisonByValue() для сортировки Map по значениям. Он возвращает Comparator, который сравнивает Map.Entry в естественном порядке значений.
map.entrySet().stream().sorted(Map.Entry.comparingByValue())...
В качестве альтернативы мы можем передать пользовательский Comparator для сортировки значений в пользовательском порядке. Например, мы можем использовать Comparator.reverseOrder() для сортировки карты в обратном порядке.
map.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))...
2. Программа Java для сортировки карты по значениям
2.1. Восходящий порядок или естественный порядок
Следующая программа Java сортирует записи Map в естественном порядке и собирает отсортированные записи в LinkedHashMap. Мы собираем записи в LinkedHashMap, поскольку он поддерживает порядок вставки.
Map<String, Integer> unsortedMap = Map.of("a", 1, "c", 3, "b", 2, "e", 5, "d", 4);LinkedHashMap<String, Integer> sortedMap = unsortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue()).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(oldValue, newValue) -> oldValue, LinkedHashMap::new));System.out.println(sortedMap);
Вывод программы.
{a=1, b=2, c=3, d=4, e=5}
2.2. По убыванию
Как обсуждалось выше, мы используем Comparator.reverseOrder() для сортировки значений Map в обратном порядке.
Map<String, Integer> unsortedMap = Map.of("a", 1, "c", 3, "b", 2, "e", 5, "d", 4);LinkedHashMap<String, Integer> sortedMap = unsortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(oldValue, newValue) -> oldValue, LinkedHashMap::new));System.out.println(sortedMap);
Вывод программы.
{e=5, d=4, c=3, b=2, a=1}