我对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);
原文地址:https://www.jb51.cc/java/123008.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。