首页 > 解决方案 > 使用 Java Fork/Join 并行搜索字符串中的单词

问题描述

假设我想以并行方式搜索字符串中某个单词的出现。例如,我们有一个字符串“你好,我是 bob,我的名字是 bob”和一个单词“bob”。该函数需要返回 2。

按顺序实现这一点非常容易。我们只需要使用一个 for 循环来遍历我们的字符串,并在我们的单词与字符串中的另一个单词匹配时进行计数。

我正在尝试使用并行性来解决这个问题。我考虑在每个空白处拆分字符串并将单词传递给每个线程,然后检查它是否与我们搜索的单词匹配。但是,在我们的字符串中查找空格仍然是按顺序完成的。因此,并行性在这里没有好处。

有没有其他方法可以实现这一目标?

标签: javaparallel-processingfork-join

解决方案


这不是 fork join 可以解决的问题,因为这不是递归操作。Stream api是去这里的方式:

String str = "Hello i am bob and my name is bob";
long count = Arrays.stream(str.split("\\s+"))
        .parallel()
        .filter(s -> s.equals("bob"))
        .count();
System.out.println("Bob appeared " + count + " times");

推荐阅读