Java 使用流从文件中逐字存储<;T>;

Java 使用流从文件中逐字存储<;T>;,java,stream,Java,Stream,我正在学习使用Stream,并尝试在没有Scanner.hasNext()的情况下,在一个文件中获取所有包含元音且单词长度大于4的单词 对于该文件的示例,我想编写如下代码 Stream<String> text = Files.lines(Paths.get(example.txt)); List<String> result = text.filter(w->w.length()>4) .filter(w -> w.contains("a&

我正在学习使用Stream,并尝试在没有Scanner.hasNext()的情况下,在一个文件中获取所有包含元音且单词长度大于4的单词

对于该文件的示例,我想编写如下代码

Stream<String> text = Files.lines(Paths.get(example.txt));
List<String> result = text.filter(w->w.length()>4)
.filter(w -> w.contains("a")||w.contains("e")||
w.contains("i")||w.contains("o")||w.contains("u")).collect(Collectors.toList());
System.out.println(result);
但它返回与文本相同的字符串

我所知道的就是使用流在文本文件中逐行读取,但我想让它逐字读取(或从每行中拆分字符串)


有人能帮我吗?

你可以试试下面的片段

List<String> result = Files.lines(Paths.get("/tmp/examples.txt"))
                                   .flatMap(line -> Arrays.stream(line.split("\\W+")))
                                   .filter(w -> w.length() > 4)
                                   .filter(w -> w.matches(".*[aeiou].*"))
                                   .collect(Collectors.toList());

System.out.println(result);

@Mikeffhay你是对的,我可能会犯错误。但我想逐字逐句地处理,而不是一行一行地处理。谢谢!它非常有效!
List<String> result = Files.lines(Paths.get("/tmp/examples.txt"))
                                   .flatMap(line -> Arrays.stream(line.split("\\W+")))
                                   .filter(w -> w.length() > 4)
                                   .filter(w -> w.matches(".*[aeiou].*"))
                                   .collect(Collectors.toList());

System.out.println(result);
[There, bunch, vowels, example, vowel]