Код для подсчета определенной строки в каждой строке текстового файла с использованием Java 8 Stream

#java-8 #java-stream

#java-8 #java-stream

Вопрос:

Я новичок в потоках, и у меня есть требование подсчитывать определенную строку в каждой строке текстового файла с использованием Java 8 Stream. Есть ли у кого-нибудь предложения или примеры кода? Редактировать: Я пропустил добавление моего примера кода .. Вот код, который я только что запустил, но я понятия не имею, как использовать count () в потоке.

 Stream<String> lines=Files.lines(Paths.get("M:\GIT_CODE\FIRE_CHAT_PARSE\New Text Document.txt"));

lines.map(eachLine-> spliteLineToArrayofSTrFunc(eachLine)).forEach(eachLines->{
        System.out.println(eachLines);  
        System.out.println();   
});
        
private static Function<String, String[]> spliteLineToArrayofSTrFunc(String line) {
        return (String lines)->{
            System.out.println();
            return line.split(" ");
        };
}
  

Комментарии:

1. Что вы уже пробовали? Пожалуйста, поделитесь своими попытками и задайте более конкретный вопрос.

2. Предложение: Найдите терминальную операцию с именем count в Stream классе. Но помните, что вам может потребоваться filter конкретная строка перед подсчетом.

3. Сначала попробуйте что-нибудь, а затем опубликуйте проблемы, с которыми вы сталкиваетесь.

4. Я пропустил ввод своего кода. Только что отредактировал мой вопрос.

5. Допустим, вы хотите найти строку lapse ? Вы хотите, чтобы счетчик включал слово collapse ? Что, если строка включает строку более одного раза? Вы должны быть конкретны в том, что вы хотите. Возможно, покажите несколько примеров.

Ответ №1:

Если ваш вопрос касается поиска точного соответствия словам, разделенным пробелом, а также включения слов, заканчивающихся на . , тогда вы можете сделать что-то вроде —

 long count =
    strings.stream()
        .flatMap(str -> Arrays.stream(str.split("[\s\.] ")))
        .filter(str -> str.equals(wordToSearch))
        .count();
  

Для строк ниже 2, если вы выполните поиск по word stream , вы получите 3 в качестве количества.

 I am new to the stream and I have the requirement to count a particular String in each line of a text file using Java 8 stream. 
Does anyone have any stream suggestions or sample code? Edit: I missed to add my sample code.
  

Комментарии:

1. Вы можете избежать временного массива, созданного split с помощью .flatMap(Pattern.compile("[\s\.] " )::splitAsStream) . Это также позволит избежать компиляции шаблона регулярных выражений для каждой строки.