2015-12-04 8 views
6

CompletableFuture<Void>と宣言され、結果のコレクションなどを返さない理由は、CompletableFuture.allOfですか? CompletableFuture.anyOf返信CompletableFuture<Object>を作成することをお勧めしますが、これらの2つの方法が接続されていることがわかります。返される内容については混乱しています。CompletableFuture.allOfがCompletableFutureとして宣言されているのはなぜですか?<Void>?

+2

これは、呼び出し元が決して問い合わせをしなくても、事前に 'List'を作成する必要があります。 – Holger

答えて

5

anyOfは、何らかの理由で、完了がanyOfをトリガーした特定のCompletableFutureの結果であったことを伝えなければなりません。 allOfの場合は、どの先物が完了したか知っているので、これは必要ではありません。

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> sequence

+0

あなたの説明をお寄せいただきありがとうございますが、とにかく 'allOf'がCompletableFutureのストリームを返すことができない理由や結果、または他の理由を理解できません... – Everv0id

関連する問題