8

結果のコレクションなどを返さないとCompletableFuture.allOf宣言されているのはなぜですか? returnCompletableFuture<Void>にするのは良い考えだと思いますが、これら2つのメソッドが接続されているので、それらが返すものについて混乱しています。CompletableFuture.anyOfCompletableFuture<Object>

4

2 に答える 2

7

anyOfCompletableFuture完了がトリガーされた特定の結果が何であったかをどうにかして伝える必要がありますanyOfallOfどの先物が完了したかを知っているので、それは必要ありません-それらすべて.

allOf(同様にanyOf) すべての先物が同じ型を持つ必要はありません。したがって、コレクションの未来を返す場合、それはおそらくあなたが望むものではないコレクションでObjectなければなりません。

コレクションの未来を本当に返したい場合はallOf、独自に書くのはかなり簡単です。

public static CompletableFuture<List<Object>> myAllOf(CompletableFuture<?>... futures) {
     return CompletableFuture.allOf(futures)
            .thenApply(x -> Arrays.stream(futures)
                    .map(f -> (Object) f.join())
                    .collect(toList())
            );
}

この問題のタイプ セーフ バージョンがあり、特定のタイプのフューチャーのコレクションを同じタイプのコレクションのフューチャーに変換する必要がある場合は、いくつかの例についてこの質問を参照してください: List<Future> to Future<List> シーケンス

于 2015-12-04T08:37:46.897 に答える