java - 使用 Java Fork/Join 并行搜索字符串中的单词
问题描述
假设我想以并行方式搜索字符串中某个单词的出现。例如,我们有一个字符串“你好,我是 bob,我的名字是 bob”和一个单词“bob”。该函数需要返回 2。
按顺序实现这一点非常容易。我们只需要使用一个 for 循环来遍历我们的字符串,并在我们的单词与字符串中的另一个单词匹配时进行计数。
我正在尝试使用并行性来解决这个问题。我考虑在每个空白处拆分字符串并将单词传递给每个线程,然后检查它是否与我们搜索的单词匹配。但是,在我们的字符串中查找空格仍然是按顺序完成的。因此,并行性在这里没有好处。
有没有其他方法可以实现这一目标?
解决方案
这不是 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");
推荐阅读
- c# - Console.WriteLine 没有打印出来
- android - 在具有外部布局的列表视图中添加按钮
- java - 每 x 秒更新一次 textview 以在后台显示通知
- javascript - 用 jquery 正则表达式检查
- r - 错误:至少一个类级别不是有效的 R 变量名
- android - 如何在回收卡视图中共享卡片视图的内容,如 textview 字符串
- jquery-ui - Google 自动地址:房屋名称属性
- laravel-5 - Boostrap 模态未在 Laravel 5 中加载
- r - for(i in seq_along(data_file):文件错误(文件,“rt”):无效的“描述”参数
- reactjs - 如何在 Meteor 环境中使用 React、Material UI 和 Styled-components 管理服务器端渲染?