【发布时间】:2015-08-03 21:08:07
【问题描述】:
在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);
}
}
所以我处理列表中所有有序的项目对(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) 函数,但可能为一组准备好的对。
【问题讨论】:
-
我回滚了编辑#4,它显着改变了问题,意味着使现有答案不合适。如果您有不同的问题,请提出而不是编辑旧问题。
标签: java list parallel-processing java-8 java-stream