Как отсортировать HashMap по значению?
Вы можете добиться определённого порядка вывода элементов HashMap
words_counters.entrySet()
    .stream()
    .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
    .forEach(System.out::println);
Но не отсортировать саму коллекцию, так как HashMap не гарантирует сохранения упорядоченности элементов.

Если нужна упорядоченная реализация Map используйте TreeMap или LinkedHashMap.
Простите с телефона. Но думаю ответ в области Streams.
Например : map.entryset().stream()
.sorted((entry1, entry2) -> customComparator.max(entry1.value, entry2.value))
.map(entry -> entry.getKey())
.collect(toList())