如何从阵列创建并行流?

时间:2016-12-02 13:29:38

标签: java arrays parallel-processing java-8 java-stream

我可以使用<!-- Form file --> <form id="postnotes" name="postnotes" action="./mechanic/comments.php" method="post"> <textarea id="comments" class="comments" rows="4" name="comment" cols="50" placeholder="Make a note"></textarea> </form> <script type="text/javascript"> $(function() { $('textarea#comments').on('keyup', function(e) { if (e.which == 27 && ! e.shiftKey) { document.getElementById("postnotes").submit(); } }); }); </script> <!-- file comments --> <?php if(isset($_POST['postnotes'])){ echo 'hello its me your looking for'; } else{echo 'nope srry';} ?> Arrays.stream(array)从数组创建一个Stream。同样,是否可以直接从数组创建ParallelStream而无需像Stream.of(values)那样创建中间集合

2 个答案:

答案 0 :(得分:31)

  Stream.of(array).parallel() 

  Arrays.stream(array).parallel()

答案 1 :(得分:0)

TLDR;

通过调用Stream可以将任何顺序的.parallel()转换为并行的parallel()。因此,您所需要做的就是:

  1. 创建流
  2. 在其上调用方法BaseStream

好答案

这个问题已经很老了,但是我相信一些额外的解释将使事情变得更加清楚。

Java流的所有实现都实现接口BaseStream::isParallel。根据JavaDoc,哪个是:

  

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

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

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

让我们探索AbstractPipeline@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; } 方法会做什么?它如何将顺序流转换为 parallel 流?

parallel

好吧,它只会将true标志设置为@echo off for /d %%a in (\\MIGRATE01\content\*) do ( pushd "%%a" set x=%%~nxa echo no_match=E:\Nomatch\%%~nxa\)>"E:\Testing\prop_file1.txt" E:\oracle1_run.bat --context=Default --context_param prop_file=E:\Testing\prop_file1.txt popd ) popd del "E:\Testing\prop_file1.txt" 。这就是全部。

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