我已阅读Scala Future and Promise和this post in stackoverflow,我理解这个概念是
您可以将期货和承诺视为管道的两个不同方面。在承诺方面,数据被推入,并且在未来方面,数据可以被拉出。
现在我想知道如何使用Java 8 CompletableFuture
做同样的事情。
示例代码:
Promise<String> promise = new Promise.DefaultPromise<>();
listOfString.stream().forEach(oneString -> {
promise.trySuccess(oneString);
});
//..... some other computation here ....
promise.future().map(new Mapfunction{...});
我想知道如何使用Java 8 CompletableFuture
来实现相同的目标,因为我认为CompletableFuture
并没有真正的数据推送和数据推出概念,如Scala承诺。
答案 0 :(得分:2)
在Java 8中,CompletableFuture
是&#34;写&#34;计算的一面,而CompletionStage
是&#34;读&#34;侧。
例如:
CompletableFuture<String> fut = new CompletableFuture<String>();
listOfString.stream().forEach(oneString -> {
fut.complete(oneString);
});
// do some stuff (possibily asynchronously)
// and then complete the future
fut.thenApply(/* some computation */);
现在,由于CompletableFuture
扩展CompletionStage
,您可以将fut
实例作为CompletionStage
传递,并且您的用户将能够附加异步操作,以便在完成后执行