java - allOf 用于 CompletionStage
问题描述
我正在尝试等待CompletionStage
. 两种方法有什么区别:
1. CompletableFuture.allOf(test.toArray(new CompletableFuture[0])).join();
2. CompletableFuture.allOf(test.stream().map(CompletionStage::toCompletableFuture)
.toArray(CompletableFuture[]::new)).join();
IntelliJ 显示第一个警告,指出预期类型 isCompletableFuture[]
和 not CompletionStage[]
。我写了一个小测试,似乎两者的行为相同。是否有一种首选或“正确”的方式优于另一种?谢谢。(主要是看我是否犯了根本性错误,或者其中一种风格是否更正确)。
解决方案
第二个是最安全的 IMO。正如您所说,两者都可以正常工作,但是CompletionStage
是CompletableFuture
(换句话说,CompletableFuture 是 CompletionStage 的实现)的超级接口,因此toArray
如果元素的实际类型不是,则在第一种方法中执行操作理论上可能会导致运行时异常CompletableFuture
。
另一方面,第二种方法利用了toCompletableFuture()
明确设计的 API 方法,可以从任何CompletionStage
实现类互操作到CompletableFuture
.
推荐阅读
- scala - 工件 ID 中包含的 Scala 和 Scala.js 版本
- mysql - 使用修剪功能缩小结果集
- database - Neo4j 节点属性数组来创建关系
- api - 当我将 Swagger API 导入 Postman 时,所有请求名称在 Postman GUI 中最终都是空白的
- mdriven - 在 MDriven Turnkey 中执行表达式 OnShow
- python - 将 skimage 图像传递给 cv2.threshold 函数
- reactjs - 如何在任何操作下重置(redux)reducer 状态值?
- jsp - Struts2 - 无法在 jsp 文件中显示字符串值
- mysql - CASE WHEN 多重条件,仅在移除另一个条件后才有效
- windows - 什么是“publickeytoken=31bf3856ad364e35”?