编程语言
首页 > 编程语言> > 用Java 8 CompletableFuture替换Futures.successfulAsList吗?

用Java 8 CompletableFuture替换Futures.successfulAsList吗?

作者:互联网

我正在寻找用Java 8的CompletableFuture代码替换Guava的Futures.successfulAsList()的规范代码.

我认为CompletableFuture.allOf()似乎是Futures.allAsList()的替代品,但是我看不到任何类似于successAsList()的东西.

解决方法:

实际上,CompletableFuture.allOf(…)比allAsList()更接近successAsList().

实际上,allOf()仅在所有给定的期货都完成后才完成,无论是带有值还是异常.然后,您可以检查每个将来以检查其完成情况(例如,在随后的thenAccept()/ thenApply()中).

allAsList()在CompletableFuture中没有非常接近的等效项,因为一旦任何输入Future失败,它都应该失败.但是,您可以结合使用allOf()来实现它,并将每个输入的future与一个exception()链接起来,这将使allOf()返回的future立即失败:

CompletableFuture<String> a = …, b = …, c = …;
CompletableFuture<Void> allWithFailFast = CompletableFuture.allOf(a, b, c);
Stream.of(a, b, c)
    .forEach(f -> f.exceptionally(e -> {
        allWithFailFast.completeExceptionally(e);
        return null;
    }));

标签:completable-future,java-8,asynchronous,guava,java
来源: https://codeday.me/bug/20191026/1933764.html