Вы не можете отсортировать TreeMap по значению. Я знаю, что ответ существует. Он пытается ответить на вопрос, похожий на: «Как приготовить кофе с помощью отвертки?» - просто не имеет смысла пытаться ответить на вопрос.
TreeMap автоматически сортируется по ключу.
Вот что он делает. Это не сортирует по значению и не может быть сделано без глупых хаков.
Итак, что вы можете сделать?
Для начала, забудьте о TreeMap. Я думаю, что ваше мышление пошло: мне нужна карта с какой-то сортировкой - позвольте мне взглянуть на API - о, есть эта вещь TreeMap, она упоминает сортировку - я буду использовать это. Как я уже говорил, TreeMap явно означает сортировка по ключам - если сортировка по ключам не то, что вы ищете, то TreeMap это не то, что вы ищете. Go с простой старой доброй картой jane.
Затем вы можете отсортировать значения путем потоковой передачи значений карты и их сортировки:
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 10);
map.put(2, 5);
map.put(3, 30);
Comparator<Map.Entry<Integer, Integer>> comparator = Comparator.comparingInt(
entry -> entry.getValue().intValue()).reversed();
System.out.println(map.entrySet().stream()
.sorted(comparator)
.map(entry -> String.format("%d occurs %d times.", entry.getKey(), entry.getValue()))
.collect(Collectors.joining("\n")));
напечатает то, что вы хотите.