Я бы рекомендовал использовать простую карту вместо приоритетной очереди.Используя Files.lines()
и Java Stream, вы можете использовать это:
public static Map<String, Long> build(String filePath) throws IOException {
if (filePath == null) {
throw new NullPointerException("File doesn't exist");
}
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
return lines.map(s -> s.split("")).flatMap(Arrays::stream)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
}
}
Если вам нужен порядок символов, вы можете использовать LinkedHashMap
, который остается в порядке вставки.Измените сборщик моего примера выше на:
Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())