是否可以使用Java 8 Streams API进行异步处理?

Ric*_*erg 27 java asynchronous java-8 java-stream

我一直在Java 8中使用CompletionStage/CompletableFuture来进行异步处理,这非常有效.但是,有时我想要一个阶段来执行迭代器/项目流的异步处理,似乎没有办法做到这一点.

具体来说,Stream.forEach()具有语句,在调用之后所有项都已处理完毕.我想要同样的东西,但改为使用CompletionStage,例如:

CompletionStage<Void> done = stream.forEach(...);
done.thenRun(...);
Run Code Online (Sandbox Code Playgroud)

如果Stream由异步流式传输结果支持,那么比等待它在上面的代码本身中完成要好得多.

是否有可能以某种方式使用当前的Java 8 API构建它?解决方法?

Sou*_*man 22

据我所知,流API不支持异步事件处理.听起来你想要像Reactive Extensions for .NET这样的东西,它有一个名为RxJava的Java端口,由Netflix创建.

RxJava支持许多与Java 8流相同的高级操作(例如map和filter),并且是异步的.

更新:现在有一个反应流计划正在进行中,看起来JDK 9将至少包含对Flow类的部分支持.

  • 确实,RxJava就是你想要的.Streams的设计中心主要是关于可以无延迟地访问的数据(来自数据结构或生成函数); Rx的设计中心是无限的事件流,可能是异步到达的. (20认同)

Ada*_*ent 7

正如@KarolKrol所暗示,你可以用一个流来实现CompletableFuture.

有一个构建在JDK8流之上的库,以便于处理CompletableFuture被称为cyclops-react的流.

谱写自己的数据流可以使用独眼龙,反应的流畅承诺IKE API,或者您可以使用简单的,反应的Stage小号.