GuavaのFutures.successfulAsList()
をJava 8のCompletableFuture
コードに置き換える標準的なコードを探しています。Futures.successfulAsListをJava 8 CompletableFutureに置き換えますか?
私はCompletableFuture.allOf()
がFutures.allAsList()
の代わりに見えますが、私は全く同じように見えません。successfulAsList()
。
GuavaのFutures.successfulAsList()
をJava 8のCompletableFuture
コードに置き換える標準的なコードを探しています。Futures.successfulAsListをJava 8 CompletableFutureに置き換えますか?
私はCompletableFuture.allOf()
がFutures.allAsList()
の代わりに見えますが、私は全く同じように見えません。successfulAsList()
。
CompletableFuture.allOf(…)
は、実際にはよりもsuccessfulAsList()
に近い。
実際、allOf()
は、すべての指定された先物が完了した後にのみ完了します。値または例外があります。その後、各未来を検査して、どのように完了したかを確認することができます(たとえば、thenAccept()
/thenApply()
)。
allAsList()
入力先が失敗するとすぐにエラーが発生するため、には相当するものがありません。しかし、あなたがallOf()
とallOf()
によって返された未来はすぐに失敗するだろうexceptionally()
で、各入力将来の連鎖の組み合わせでそれを実現することができます。
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;
}));
おかげディディエが、それは便利です。 – Miket