如何从数组创建并行流?

我可以使用 或 从数组创建流。类似地,是否可以直接从数组创建 ParallelStream,而不创建中间集合,如 ?Arrays.stream(array)Stream.of(values)Arrays.asList(array).parallelStream()


答案 1
  Stream.of(array).parallel() 

  Arrays.stream(array).parallel()

答案 2

TLDR;

任何顺序都可以通过调用它来转换为并行序列。因此,您所需要的只是:Stream.parallel()

  1. 创建流
  2. 在其上调用方法。parallel()

长答案

这个问题已经很久了,但我相信一些额外的解释会让事情变得更加清晰。

Java 流的所有实现都实现了接口 。根据JavaDoc,它是:BaseStream

流的基本接口,流是支持顺序和并行聚合操作的元素序列。

从 API 的角度来看,顺序流和并行流之间没有区别。它们共享相同的聚合操作。

为了区分顺序流和并行流,聚合方法调用方法。BaseStream::isParallel

让我们探讨一下方法的实现:isParallelAbstractPipeline

@Override
public final boolean isParallel() {
    return sourceStage.parallel;
}

如您所见,唯一要做的就是在源代码阶段检查布尔标志:isParallel

/**
 * True if pipeline is parallel, otherwise the pipeline is sequential; only
 * valid for the source stage.
 */
private boolean parallel; 

那么,该方法会做什么呢?它如何将顺序流转换为并行流?parallel()

@Override
@SuppressWarnings("unchecked")
public final S parallel() {
    sourceStage.parallel = true;
    return (S) this;
}

好吧,它只将标志设置为.这就是它所做的一切。paralleltrue

如您所见,在 Java Stream API 的当前实现中,如何创建流(或将其作为方法参数接收)并不重要。您始终可以将流转换为零成本的并行流。