私はcompletable先物として枠3件のダウンロードを、持っているとしますCompletableFuture:複数のCompletableFuturesに関数を適用するにはどうすればよいですか?
CompletableFuture<Doc> dl1 = CompletableFuture.supplyAsync(() -> download("file1"));
CompletableFuture<Doc> dl2 = CompletableFuture.supplyAsync(() -> download("file2"));
CompletableFuture<Doc> dl3 = CompletableFuture.supplyAsync(() -> download("file3"));
そして、それらのすべてが同じよう
CompletableFuture<String> s1 = dl1.thenApply(Doc::getFilename);
CompletableFuture<String> s2 = dl2.thenApply(Doc::getFilename);
CompletableFuture<String> s3 = dl3.thenApply(Doc::getFilename);
を処理する必要があり、適用される複数の機能を想像することができ、すべてで平行。
DRYの原則によれば、この例は不適切と思われます。だから私は、並列に3回実行されるワークフローを1つだけ定義するソリューションを探しています。
これはどのように達成できますか?
私はallOf
を試しましたが、それには2つの問題があります.1)ブロックが開始され、2)戻り値の型はrun
のものしか扱えません。もちろん
は、まずダウンロードして呼び出し、新しいメソッドを宣言すると、あなたが持っているだろうより多くのの世話をする必要があるかもしれませんGetFilename –
を取得するには、ファイルをリストに入れてから繰り返し処理することを考えましたか? – Ash