Ваш критерий сортировки для TreeSet
также определяет, какие элементы считаются равными друг другу. Это означает, что два ключа с одинаковой частотой в freqMap
будут считаться равными, поэтому только один из них будет добавлен в Set
.
Если вы хотите, чтобы все ключи в TreeSet
были добавлены к вашей Comparator
логике прерывателя связей, чтобы определить порядок двух символов с одинаковой частотой.
TreeSet<Character> sortByFreq = new TreeSet<Character>((a,b)->{
int diff = Integer.compare(freqMap.get(b),freqMap.get(a));
return diff == 0 ? Character.compare(b,a) : diff;
});
Теперь вывод будет:
[e, t, r]
EDIT:
Или, как предложил Андреас:
TreeSet<Character> sortByFreq = new TreeSet<Character>(Comparator.comparing((Character c) -> freqMap.get(c))
.thenComparing(Comparator.naturalOrder())
.reversed());