将Scala Future和Promise转换为Java 8 ComletableFuture

时间:2017-06-13 13:16:10

标签: scala java-8 promise future completable-future

我已阅读Scala Future and Promisethis 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承诺。

1 个答案:

答案 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传递,并且您的用户将能够附加异步操作,以便在完成后执行