将 Futures.successfulAsList 替换为 Java 8 CompletableFuture?
Replace Futures.successfulAsList with Java 8 CompletableFuture?
我正在寻找用 Java 8 的 CompletableFuture
代码替换 Guava 的 Futures.successfulAsList()
的规范代码。
我认为 CompletableFuture.allOf()
seems like a replacement for Futures.allAsList()
,但我没有看到任何类似 successfulAsList()
的东西。
CompletableFuture.allOf(…)
实际上比 allAsList()
.
更接近 successfulAsList()
事实上,allOf()
只有在所有给定的期货都完成后才完成,无论是有值还是异常。然后你可以检查每个 future 来检查它是如何完成的(例如在下面的 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;
}));
我正在寻找用 Java 8 的 CompletableFuture
代码替换 Guava 的 Futures.successfulAsList()
的规范代码。
我认为 CompletableFuture.allOf()
seems like a replacement for Futures.allAsList()
,但我没有看到任何类似 successfulAsList()
的东西。
CompletableFuture.allOf(…)
实际上比 allAsList()
.
successfulAsList()
事实上,allOf()
只有在所有给定的期货都完成后才完成,无论是有值还是异常。然后你可以检查每个 future 来检查它是如何完成的(例如在下面的 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;
}));