Вы можете определенно уменьшить код шаблона и сделать его более кратким.
Не проверял код ниже, но что-то вроде этого должно быть достаточно:
Files.lines(Paths.get(path))
.flatMap(delimeter::splitAsStream)
.map(String::toLowerCase)
.filter(s -> s.indexOf(symbol) >= 0)
.distinct()
.map(s -> new SimpleEntry<>(s, s.chars().filter(c -> c == symbol).count()))
.sorted(Map.Entry.<String,Long>comparingByValue(Comparator.reverseOrder())
.thenComparing(Map.Entry::getKey))
.collect(toMap(SimpleEntry::getKey, e -> e.getValue().intValue(), (l, r) -> l, LinkedHashMap::new));
Этоозначает, что вам больше не нужен ваш собственный класс, так как мы используем SimpleEntry
в конвейере потока.