用Java 8 CompletableFuture替换Futures.successfulAsList吗?

Mik*_*ket 4 java asynchronous guava java-8 completable-future

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

我认为这CompletableFuture.allOf()似乎可以替代Futures.allAsList(),但是我看不到任何类似的东西successfulAsList()

Did*_*r L 5

CompletableFuture.allOf(…)实际上successfulAsList()比更加接近allAsList()

实际上,allOf()只有在所有给定的期货都完成后才完成,无论是有价还是例外。然后,您可以检查每个将来以检查它是如何完成的(例如,以下thenAccept()/ thenApply())。

allAsList()CompletableFuture之所以没有近似的等价货币,是因为一旦任何输入期货失效,它就会失效。但是,您可以结合使用来实现它,allOf()并使用将每个输入Future与链接起来exceptionally(),这会使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;
    }));
Run Code Online (Sandbox Code Playgroud)