#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)
. Это также позволит избежать компиляции шаблона регулярных выражений для каждой строки.