Упорядочивание Map<String, Integer> по его значениям

Отсортируйте entrySet по значениям и соберите записи в LinkedHashMap. Именно LinkedHashMap сохранит порядок вставки для последующего обхода.

Короткий ответ

Что ответить на собеседовании

Отсортируйте entrySet по значениям и соберите записи в LinkedHashMap. Именно LinkedHashMap сохранит порядок вставки для последующего обхода.

Подробный разбор

Ответ с пояснениями

Условие

Имеется неотсортированный словарь типа Map<String, Integer>. Требуется переставить его элементы так, чтобы они шли в порядке возрастания значений, и вернуть полученный упорядоченный словарь.

Ожидаемый результат вывода:

One=1
Two=2
Three=3
Four=4
Five=5
public class MapComparator {
    public static void main(String[] args) {
        Map<String, Integer> nonSortedMap = Map.of(
            "Two", 2,
            "Three", 3,
            "Five", 5,
            "One", 1,
            "Four", 4
        );

        Map<String, Integer> sortedMap = sortByValue(nonSortedMap);

        sortedMap.entrySet().forEach(System.out::println);
    }

    static Map<String, Integer> sortByValue(Map<String, Integer> map) {
        return map; // Реализовать сортировку по значениям
    }
}

Ответ

Отсортируйте entrySet по значениям и соберите записи в LinkedHashMap. Именно LinkedHashMap сохранит порядок вставки для последующего обхода.

static Map<String, Integer> sortByValue(Map<String, Integer> map) {
    return map.entrySet().stream()
            .sorted(Map.Entry.<String, Integer>comparingByValue()
                    .thenComparing(Map.Entry.comparingByKey()))
            .collect(java.util.stream.Collectors.toMap(
                    Map.Entry::getKey, Map.Entry::getValue,
                    (left, right) -> left, java.util.LinkedHashMap::new));
}

При одинаковых числовых значениях строки упорядочиваются по ключу. Код предполагает отсутствие null у ключей и значений. Исходный словарь не изменяется. Время O(n log n), дополнительная память O(n). TreeMap без специальной конструкции сортировал бы ключи, а не значения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее