什么是java CompletableFuture相当于scala Future的救援和处理

时间:2016-10-09 05:55:07

标签: java java-8 completable-future

我看到CompletableFuture的方法handle与scala Future的{​​{1}}方法基本相同,基本上将成功和异常都转换为成功{ {1}}和handle上游(或java世界中的mapflatMap)。

虽然java中的twitter future thenApply(或scala future thenCompose)等同于什么?

scala中的

rescue基本上类似于旧的java recoverWith,然后重新抛出更多信息,因此可以使用它。例如,在rescuetry....catch中,返回单位为twitterFuture.handle,因此您返回响应。在scalaFuture.recoverU中,它会返回twitterFuture.rescue,因此您可以采取某些例外情况,添加更多信息并返回scalaFuture.recoverWith

1 个答案:

答案 0 :(得分:3)

对于recover,如果您不需要返回超类并希望吞下所有例外,则可以使用exceptionally

CompletableFuture<T> future = ...;
CompletableFuture<T> newFuture = future.exceptionally(_exc -> defaultValue);

否则,您需要使用handle获取CompletableFuture<CompletableFuture<U>>,然后使用thenCompose将其折叠:

CompletableFuture<T> future = ...;
CompletableFuture<T> newFuture = future.handle((v, e) -> {
        if (e == null) {
            return CompletableFuture.completedFuture(v);
        } else {
            // the real recoverWith part
            return applyFutureOnTheException(e);
        }
    }).thenCompose(Function.identity());