java - 如何转换收藏> 到 CompletableFuture> 无需调用加入或获取?
问题描述
给定一组期货
final Collection<CompletableFuture<X>> futures = ...;
final CompletableFuture<Collection<X>> joined = ???
如何在不调用的情况下为所有值组合在一起的集合创造未来join
?
解决方案
解决方案是
- 转换
Collection<CompletableFuture<X>>
为Collection<CompletableFuture<Collection<X>>>
CompletableFuture.completedFuture(Collections.emptyList())
使用作为初始值减少此集合。
final CompletableFuture<Collection<X>> joined =
futures
.stream()
.map(f -> f.thenApply(value -> (Collection<X>)Collections.singletonList(value)))
.reduce(
CompletableFuture.completedFuture(Collections.emptyList()),
(f, g) ->
f.thenCompose(
xs -> g.thenApply(
ys -> Stream
.of(xs, ys)
.flatMap(Collection::stream)
.collect(Collectors.toList()))
)
);
推荐阅读
- swift - 使用覆盖将 SwipeCellKit 连接到自定义单元格 - Swift
- python - Python CV2 颜色检测混淆
- algorithm - UTXO选择策略
- reactjs - 使用从父组件中进行的异步 api 调用接收的道具更新反应子组件的状态
- php - 未排序的数组 - 从下一个更高的值获取索引 | 复杂度 O(n), PHP
- javascript - 如何只允许粘贴输入中的 URL?
- python - 如何在 python 中正确重塑 ConvLSTM 的数据?
- javascript - onDeviceChange() 仅在 macOS Chrome 中正常工作
- excel - 在行或范围函数内使用变量的语法?
- python - How to merge values with same keys in a nested dictionary? (Nothing works)