seb*_*t26 26 java optional java-8
我对Optional.ofNullable
方法感到惊讶.有一天我写了一个应该返回Optional的函数:
private Optional<Integer> extractFirstValueFrom(InsightsResponse insight) {
return Optional.ofNullable(insight.getValues().get(0).getValue());
}
Run Code Online (Sandbox Code Playgroud)
我错误地认为Optional.ofNullable
会阻止任何NullPointerExceptions
内部的参数表达.
现在我想我知道这是非常愚蠢的想法.Java必须首先解析参数以将其传递给Optional.ofNullable
调用.
但我有一个问题.有没有一个很好的方法来实现我的目标?我想从表达式获取insight.getValues().get(0).getValue()
一些Integer值或null.Null可以是表达式中的每一个:insight.getValues()
或insight.getValues().get(0)
.
我知道我可以把它放在try/catch块中,但我想知道是否有更优雅的解决方案.
Tun*_*aki 46
如果您不知道可能是什么null
,或者想要检查所有内容null
,唯一的方法是将呼叫链接到Optional.map
:
如果存在值,则将提供的映射函数应用于该值,如果结果为非null,则返回描述结果的Optional.否则返回一个空的Optional.
因此,如果映射器返回null
,Optional
将返回一个空,这允许链接调用.
Optional.ofNullable(insight)
.map(i -> i.getValues())
.map(values -> values.get(0))
.map(v -> v.getValue())
.orElse(0);
Run Code Online (Sandbox Code Playgroud)
最后一次调用orElse(0)
允许在任何mapper返回时返回默认值0 null
.
归档时间: |
|
查看次数: |
14583 次 |
最近记录: |