加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Optional.ofNullable和方法链接

发布时间:2020-12-14 05:14:49 所属栏目:Java 来源:网络整理
导读:我对Optional.ofNullable方法感到惊讶.有一天我写了一个应该返回一个可选的函数: private OptionalInteger extractFirstValueFrom(InsightsResponse insight) { return Optional.ofNullable(insight.getValues().get(0).getValue());} 我错误地认为Optional
我对Optional.ofNullable方法感到惊讶.有一天我写了一个应该返回一个可选的函数:
private Optional<Integer> extractFirstValueFrom(InsightsResponse insight) {
    return Optional.ofNullable(insight.getValues().get(0).getValue());
}

我错误地认为Optional.ofNullable将阻止参数表达式内的任何NullPointerExceptions.

现在我觉得我知道这是非常愚蠢的想法. Java必须首先解析参数,将其传递给Optional.ofNullable调用.

但我有一个问题.有没有一个很好的方法来完成我的目标?我想从表达式insight.getValues()获取get(0).getValue()一些整数值或null. Null可以是每个表达式:insight.getValues()或insight.getValues().get(0).

我知道我可以把它放在try / catch块中,但是我想知道是否有更优雅的解决方案.

解决方法

如果你不知道什么可以是null,或者想要检查一切为null,唯一的方法是将呼叫链接到 Optional.map

If a value is present,apply the provided mapping function to it,and if the result is non-null,return an Optional describing the result. Otherwise return an empty Optional.

因此,如果映射器返回null,则将返回一个空的可选项,这允许链接调用.

Optional.ofNullable(insight)
        .map(i -> i.getValues())
        .map(values -> values.get(0))
        .map(v -> v.getValue())
        .orElse(0);

如果任何映射器返回null,则最终调用orElse(0)允许返回默认值0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读