首页 > 解决方案 > 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(...)
  }
}

任何人都可以向我解释什么是错的,以及为什么执行可选映射的两个分支?

标签: javagroovylambdaoptional

解决方案


调用将 optional 的内容替换为由 . 返回mapOptional map

一个 groovy 闭包总是返回一个值。

在这种情况下,它是null值,这就是为什么Optional在调用后变为空map


推荐阅读