使用Java中的流拆分单词列表

Her*_*ahl 3 java regex string java-8 java-stream

我有这种方法,它需要许多列表,其中包含几行书。我将它们组合到一个流中,然后遍历它们以拆分所有非字母的\\P{L}

有没有办法避免for-each循环并在流中处理它?

private List<String> getWordList(List<String>... lists) {
        List<String> wordList = new ArrayList<>();

        Stream<String> combinedStream = Stream.of(lists)
                .flatMap(Collection::stream);
        List<String> combinedLists = combinedStream.collect(Collectors.toList());

        for (String line: combinedLists) {
            wordList.addAll(Arrays.asList(line.split("\\P{L}")));
        }

        return wordList;
}
Run Code Online (Sandbox Code Playgroud)

And*_*cus 9

有了流,您可以flatMap进一步简单地“ ”并返回结果:

return combinedStream
        .flatMap(str -> Arrays.stream(str.split("\\P{L}")))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

综上所述:

private List<String> getWordList(List<String>... lists) {
    return Stream.of(lists)
        .flatMap(Collection::stream)
        .flatMap(str -> Arrays.stream(str.split("\\P{L}")))
        .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)