Мне кажется, что вы могли бы переписать свое решение намного проще.Если только я не пойму это неправильно, решение будет гораздо более сложным, чем нужно.
s.chars().mapToObj(c -> (char) c).collect(Collectors.groupingBy(c -> c, Collectors.counting()));
Что касается частоты, то символы в Java поддерживаются кодами ASCII.Таким образом, вы можете вычесть символы друг от друга, чтобы получить значения ASCII.Спасибо @BackSlash за реализацию потока.