java - 并行处理 Java8 列表中的项目对

标签 java list parallel-processing 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);
    }
}

所以我处理列表中所有有序的项目对(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))));

这不必像其他任何答案一样复杂。

关于java - 并行处理 Java8 列表中的项目对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796799/

相关文章:

python - 循环数据时嵌套字典

python - 用一个函数生成多个列表

java - 另一个类的 JPanel 不会出现在主 JFrame 中

java - 如何在使用基本身份验证的 JDeveloper 中测试 Web 服务?

java - 如何在另一台机器上运行我本地的maven项目?

python - list[-1 :][0] and list[len(list)-1]? 之间有什么区别

parallel-processing - 在 CUDA 中寻找最大值

Python,如何实现并行进程

c - 为什么我不能使用默认(共享)的缩减?

java beans相互干扰