2

インスタンスのリストがありCompletableFutureます。

List<CompletableFuture<String>> listOfFutures;

次のように、それらを 1 つの未来に変換する方法は次のとおりです。

CompletableFuture<List<String>> futureOfList = convert(listOfFutures);
4

2 に答える 2

1

これは単項シーケンス操作です。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 を使用したソリューションについては、この質問と回答も参照してください(追加のスレッドはブロックされません)。

于 2015-09-19T09:24:29.973 に答える