java - 在 Java 中使用流拆分单词列表

标签 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;
}

最佳答案

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

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

总而言之:

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());
}

关于java - 在 Java 中使用流拆分单词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54969012/

相关文章:

java - 使用 JMX/Hyperic 代理在 tc 服务器中启动/停止应用程序

java - 捕获未跟随某些数字的数字流

mysql - sql数据库中的正则表达式

c++ - 删除字符串中嵌入的空字符

c++ - 什么是针对 C++ 中的大小写的字符串的许多子字符串的有效方法?

java - 替换字符串的字符

java - OrientDB完整的嵌入式集群测试

java - 如何禁用 EditText 并保持背景颜色为白色?

java - 单击“注销”按钮并重定向到带有消息的登录页面时禁用 session

php - 我如何用空格替换单个的,但如果有多个 s 则不行?