gpt4 book ai didi

java - 将可完成 future 列表转换为列表的一个可完成 future

转载 作者:行者123 更新时间:2023-11-30 10:57:21 24 4
gpt4 key购买 nike

我有一个 CompletableFuture 实例列表。

List<CompletableFuture<String>> listOfFutures;

如何将它们转换成这样的 future :

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

最佳答案

这是一个单子(monad)序列操作。随着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());

另见 this question and answer对于使用 allOf 的解决方案(不会阻止任何其他线程)。

关于java - 将可完成 future 列表转换为列表的一个可完成 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32666024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com