java - Groovy 在 Java Optional 上同时运行 map 和 orElseGet
问题描述
我在 Groovy2.4.16
和 Java8.0.212-zulu
以及java.util.Optional
.
所以,这里是代码:
def optRegion = new HttpRegion(context).region()
optRegion.map{ region ->
log.info("FOUND REGION: ${region} - ${optRegion}")
}.orElseGet{
log.info("NO-REGION, JUST KIDDING! - ${optRegion}")
}
这些是日志:
2019-08-27 10:05:31.060 +0200 [vert.x-eventloop-thread-2] INFO c.n.p.XXX:85 - FOUND REGION: POLAND - Optional[POLAND]
2019-08-27 10:05:31.061 +0200 [vert.x-eventloop-thread-2] INFO c.n.p.XXX:87 - NO-REGION, JUST KIDDING! - Optional[POLAND]
我正在使用普通的 Groovy 类,没有@CompileStatic
或任何其他注释。
返回HttpRegion
常规。java.util.Optional
class HttpRegion {
HttpRegion(RoutingContext context) {
this.context = context
}
Optional<Region> region() {
return java.util.Optional.of(...)
}
}
任何人都可以向我解释什么是错的,以及为什么执行可选映射的两个分支?
解决方案
调用将 optional 的内容替换为由 . 返回map
的Optional
值map
。
一个 groovy 闭包总是返回一个值。
在这种情况下,它是null
值,这就是为什么Optional
在调用后变为空map
推荐阅读
- r - 在两个ggplot饼图之间绘制箭头
- python - 从联系表单发送消息后,gmail 错误。Django 2.1.5
- git - 执行 git pull off master 并得到合并冲突
- c# - 从 C# 中的 3rd 方应用程序获取文本框值
- java - 程序只使用一个着色器,而我正在尝试连接 2 个着色器
- firebase - AndroidAppLinks - Firebase.FirebaseApiNotAvailableException:API:AppDataSearch.LIGHTWEIGHT_API 在此设备上不可用
- mysql - WAMPServer 在 Windows 10 上崩溃 - 如何备份所有 MySQL 数据库?
- regex - 从文档中提取特定文本
- onedrive - 通过 onedrive API 获取嵌入 URL
- python - 如何使用 pandas 编辑 XLSX 电子表格