Java 如何转换集合<;完全未来<;X>&燃气轮机;完成未来<;收藏<;X>&燃气轮机;不打电话加入或获取?

Java 如何转换集合<;完全未来<;X>&燃气轮机;完成未来<;收藏<;X>&燃气轮机;不打电话加入或获取?,java,concurrency,completable-future,Java,Concurrency,Completable Future,给出了一系列的未来 final Collection<CompletableFuture<X>> futures = ...; final CompletableFuture<Collection<X>> joined = ??? final Collection futures=。。。; 最终可完成的未来加入=??? 如何在不调用join的情况下为所有值组合在一起的集合生成未来?解决方案是 将集合转换为集合 使用CompletableFut

给出了一系列的未来

final Collection<CompletableFuture<X>> futures = ...;
final CompletableFuture<Collection<X>> joined = ???

final Collection futures=。。。;
最终可完成的未来加入=???
如何在不调用
join
的情况下为所有值组合在一起的集合生成未来?

解决方案是

  • 集合
    转换为
    集合
  • 使用
    CompletableFuture.completedFuture(Collections.emptyList())
    作为初始值
  • final CompletableFuture joined=
    期货
    .stream()
    .map(f->f.thenApply(值->(集合)集合.singletonList(值)))
    .减少(
    CompletableFuture.completedFuture(Collections.emptyList()),
    (f,g)->
    f、 然后撰写(
    xs->g.tenapply(
    ys->流
    。of(xs,ys)
    .flatMap(集合::流)
    .collect(收集器.toList())
    )
    );
    
    您将这些单独的期货组合在一起的逻辑是什么?我的意思是,如果其中一个
    CompletableFuture
    失败或超时,它将如何影响组合的
    CompletableFuture
    ?这是一个很好的方法,您在这里展示的内容与此btw的问题几乎相同,就是说
    thencomose/thenApply
    可以在
    main
    线程中轻松执行,但是我认为这看起来很不错。