首页 > 解决方案 > 流 API Java 8 并行处理

问题描述

我有2套

phraseSet包含“埃菲尔铁塔”、“东京铁塔”

wordSet包含诸如“埃菲尔”、“塔”之类的词

我如何使用 Java 8 并行流来处理如下逻辑: 1. 对于 中的每个项目phraseSet,对其进行标记,查看是否所有标记都存在于 中wordSet,如果存在则将该项目添加到名为 的新集合resultSet中。在此示例中,resultSet将包含“埃菲尔铁塔”

如果我使用传统的 for 循环很容易做到,但是在尝试使用并行流时我很困惑,我希望它也更快,因为它是并行处理的。

标签: parallel-processingjava-8java-stream

解决方案


Afilter和 anallMatch就足够了:

Set<String> phrases = new HashSet<>(Arrays.asList("eifel tower", "tokyo tower"));
Set<String> words = new HashSet<>(Arrays.asList("eifel", "tower"));
Pattern delimiter = Pattern.compile("\\s+");

Set<String> resultSet = phrases.parallelStream().filter(
    phrase -> delimiter.splitAsStream(phrase).allMatch(words::contains)
).collect(Collectors.toSet());

推荐阅读