Решение через SortedMap (моем случае TreeMap) вполне очевидно. Закидываем в мапу весь алфавит со значениями 0 для каждого символа в алфавите, затем пробегаем по всем символам во всех введенных строках и, если такой символ есть в алфавите, увеличиваем его значение в мапе на 1. Осталось только вывести map, но есть проблема с сортировкой по-умолчанию: буква 'ё' будет в самом конце. Решение -- написать свой компаратор. Элементарно, но я немного усложняю задачу: я хочу чтоб компаратор сравнивал буквы именно в том порядке, как они заданы в алфавите. То есть в List<Character> alphabet мы можем задать любой порядок символов, и в мапе символы должны быть отсортированны именно в таком порядке. Надо как-то передать алфавит в компаратор. А он, зараза, должен быть static. Мне пришлось мой алфавит вынести из тела main и сделать его статическим. Это работает, ок. Допустим, я хочу чтоб пользователь мог сам задать свой алфавит. Прочитать его из файла, например. Причем может быть несколько алфавитов. Статический алфавит тут не подходит. Вопрос: как передать non-static алфавит в статический контент компаратора?
public class Solution {

    // Алфавит
    static List<Character> alphabet = Arrays.asList(
            'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж',
            'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о',
            'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц',
            'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');

    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // Ввод строк
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            String s = reader.readLine();
            list.add(s.toLowerCase());
        }

        SortedMap<Character, Integer> map = new TreeMap<>(getCharacterComparator());

        for (Character c : alphabet) map.put(c, 0);

        for (String s : list)
            for (Character c : s.toCharArray())
                if (alphabet.contains(c))
                    map.replace(c, map.get(c) + 1);

        map.forEach((a, b) -> System.out.println(a + " " + b));
    }

    public static Comparator<Character> getCharacterComparator() {
        return new CharacterComparator();
    }

    static class CharacterComparator implements Comparator<Character> {

        @Override
        public int compare(Character c1, Character c2) {
            Integer indexOfC1 = alphabet.indexOf(c1);
            Integer indexOfC2 = alphabet.indexOf(c2);
            return indexOfC1.compareTo(indexOfC2);
        }
    }
}