インスタンスのリストがありCompletableFuture
ます。
List<CompletableFuture<String>> listOfFutures;
次のように、それらを 1 つの未来に変換する方法は次のとおりです。
CompletableFuture<List<String>> futureOfList = convert(listOfFutures);
インスタンスのリストがありCompletableFuture
ます。
List<CompletableFuture<String>> listOfFutures;
次のように、それらを 1 つの未来に変換する方法は次のとおりです。
CompletableFuture<List<String>> futureOfList = convert(listOfFutures);
これは単項シーケンス操作です。Cyclops- monad -api (私が作成したライブラリ) を使用すると、次のように記述できます。
AnyM<Stream<String>> futureStream = AnyMonads.sequence(
AsAnyMList.completableFutureToAnyMList(futures));
CompletableFuture<Stream<String>> futureOfList = futureStream.unwrap();
たとえばリストに変換するために、futureOfList 内の Stream で端末操作を呼び出すと、元のすべての Future で join() 呼び出しがトリガーされるため、join() 自体と同様の方法で使用する必要があります。
CompletableFuture<List<String>> completed = futureOfList.thenApply(
s->s.collect(Collectors.toList());
CompletableFuture 専用の独自のバージョンを作成するには、次のようにします。
CompletableFuture<Stream<String>> futureOfList = CompletableFuture.completedFuture(1)
.thenCompose(one->listOfFutures.stream()
.map(cf->cf.join()));
その後、参加する
CompletableFuture<List<String>> completed = futureOfList.thenApply(
s->s.collect(Collectors.toList());
allOf を使用したソリューションについては、この質問と回答も参照してください(追加のスレッドはブロックされません)。