gpt4 book ai didi

java - 用 Java 8 CompletableFuture 替换 Futures.successfulAsList?

转载 作者:搜寻专家 更新时间:2023-11-01 02:20:57 26 4
gpt4 key购买 nike

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

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

最佳答案

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

事实上,allOf() 只有在所有给定的 futures 完成后才完成,无论是有值还是异常。然后,您可以检查每个 future 以检查它是如何完成的(例如,在以下 thenAccept()/thenApply() 中)。

allAsList()CompletableFuture 中没有接近的等价物,因为它应该在任何输入 future 失败时立即失败。但是,您可以结合使用 allOf() 并使用 exceptionally() 链接每个输入 future 来实现它,这将使 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;
}));

关于java - 用 Java 8 CompletableFuture 替换 Futures.successfulAsList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43330764/

26 4 0