Я не знаю, есть ли лучший подход, и это также будет зависеть от деталей, которые вы нам не сказали. На данный момент я принимаю текстовый файл с несколькими словами, разделенными пробелами в каждой строке. Возможным подходом было бы следующее:
Map<String, Long> result = Files.lines(filePath)
.flatMap(line -> Stream.of(line.split(" ")))
.collect(Collectors.groupingBy(word -> word, Collectors.counting()));
Я думаю, что расщепление каждой строки на слова необходимо уточнить; вы, вероятно, захотите отменить пунктуацию, например. Возьмите это как отправную точку и превратите ее в то, что вам нужно в вашей конкретной ситуации.
Edit: с благодарностью @ 4castle для вдохновения, разбиение на слова может быть сделано таким образом вас предпочитают эталонный метод над лямбда:
Map<String, Long> result = Files.lines(filePath)
.flatMap(Pattern.compile(" ")::splitAsStream)
.collect(Collectors.groupingBy(word -> word, Collectors.counting()));
Он производит то же самое. Edit2: глупость об оптимизации удалена здесь.
Возможно, нам не стоит заходить слишком далеко, пока мы не узнаем более точное требование для разграничения слов в каждой строке.
Какой формат файла? И повторное количество слов, это просто для каждого слова во вводе, количество вхождений? Или…? –