Bra*_*ery 1 java parallel-processing list java-8 java-stream
在中Java8,让List<Item> list我按以下顺序进行处理:
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
for (int i1 = 0; i1 < list.size() - 1; i1++) {
Item item1 = list.get(i1);
for (int i2 = i1 + 1; i2 < list.size(); i2++) {
Item item2 = list.get(i2);
doSomething(item1, item2);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我处理列表中所有有序的项目对(索引item1<的索引,<的索引item2)。现在,我想doSomething(item1, item2)为每个有序对并行运行函数。实现这一目标的最佳策略是什么?对最快的代码感兴趣。Java8流欢迎。
doSomething比如做:map.put(item1.key + " " + item2.key, item1.val + item2.val);。
有序对的数量n * (n - 1) / 2,其中n是列表的大小。我还考虑平均分配工作量以达到负载平衡(目前假设每对执行时间相同)。因此,不需要doSomething(item1, item2)为每个有序对并行调用函数,而是可能为一组准备好的对并行调用函数。
IntStream.range(0, list.size()).parallel()
.forEach(i1 ->
IntStream.range(i1 + 1, list.size()).parallel()
.forEach(i2 -> doSomething(list.get(i1), list.get(i2))));
Run Code Online (Sandbox Code Playgroud)
这不必像其他任何答案一样复杂。
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |