java - 如何使用 ParallelStream 将一个数组的每个元素添加到另一个数组的相应元素?

标签 java arrays java-8

使用示例可能更容易解释我想要做的事情。假设我必须遵循两个数组:

int firstArray[] = {1, 2, 3, 4, 5};
int secArray[] = {1, 2, 3, 4, 5};

我想要的是将第二个数组的每个元素 i 添加到第一个数组的每个元素 i 中。当然,创建第三个数组也可以。

在此示例中,结果将是:2, 4, 6, 8, 10

我可以在 Java 8 中使用 ParallelStream 来做到这一点吗?我只能想到使用至少一个索引的解决方案,但由于并行性(这也违背了目的),它们并没有真正起作用。

这种单线程方法有效:

AtomicInteger i = new AtomicInteger(0);
int resultArray[] = Arrays.stream(firstArray)
                          .map(a -> a + secArray[i.getAndIncrement()]).toArray();

但是如果我使用并行流尝试此操作,结果是(当然它们是)随机的,并且程序非常慢。有任何想法吗?

最佳答案

这是 IntStream 的典型用例:

IntStream.range(0, firstArray.length).parallel()
    .forEach(i -> { secArray[i] += firstArray[i]; });

如果您需要将结果放在单独的数组中,可以使用相同的方法:

int[] result = IntStream.range(0, firstArray.length).parallel()
    .map(i -> firstArray[i] + secArray[i])
    .toArray();

关于java - 如何使用 ParallelStream 将一个数组的每个元素添加到另一个数组的相应元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746464/

相关文章:

java - lambda 调用如何与接口(interface)交互?

java - 不懂Java原子包中的CAS操作

java - 此代码不断格式化文件而不是写入文件。我如何解决它?

javascript - JavaScript 中有不同类型的数组吗?

java - 使用java 8以相反的顺序读取文件

ubuntu - Docker 容器——在旧的 java6 版本上运行新的 java8 代码

java - OpenGL 延迟着色照明无法正常工作

java - Spring 3 报错信息的含义和解决方法? "Using getResponseBodyAsStream instead is recommended"

java - 如何通过android连接SMSC模拟器?

android - ListView 和 ArrayAdapter<String>