'Optional.get()' 没有 'isPresent()' 检查
'Optional.get()' without 'isPresent()' check
我在Java中有如下搜索代码:
return getTableViewController().getMe().getColumns().stream()
.filter($ -> Database.equalsColumnName($.getId(), columnId))
.findFirst()
.get();
我希望按名称查找列,return 找到第一个。
我知道有些情况下什么都找不到,应该处理,但是如何处理?
这就是它要的脏话:
'Optional.get()' without 'isPresent()' check
?
如何解决?如果没有找到,我希望 return null
。
更新
好吧好吧,我只是没意识到,findFirst()
returns Optional
.
将 get()
替换为 orElse(null)
。
...findFirst().orElse(null);
Returns 值(如果存在),否则 returns null
。文档 says that the passed parameter may be null
(what is forbidden for orElseGet
and orElseThrow
).
我的解决办法是这样检查
if(item.isPresent()){
item.get().setId("1q2w3e4r5t6y")
}
创建了可选的,这样代码可以在经过几十年之后,终于开始避免 null。
删除 .get(),return Optional 本身并使调用代码适当地处理它(就像在 returning 的情况下必须做的那样)空)。
我们可以像下面这样使用
.map(对象)
.filter(可选::isPresent)
.map(可选::获取)
.orElse(null)
我在Java中有如下搜索代码:
return getTableViewController().getMe().getColumns().stream()
.filter($ -> Database.equalsColumnName($.getId(), columnId))
.findFirst()
.get();
我希望按名称查找列,return 找到第一个。
我知道有些情况下什么都找不到,应该处理,但是如何处理?
这就是它要的脏话:
'Optional.get()' without 'isPresent()' check
?
如何解决?如果没有找到,我希望 return null
。
更新
好吧好吧,我只是没意识到,findFirst()
returns Optional
.
将 get()
替换为 orElse(null)
。
...findFirst().orElse(null);
Returns 值(如果存在),否则 returns null
。文档 says that the passed parameter may be null
(what is forbidden for orElseGet
and orElseThrow
).
我的解决办法是这样检查
if(item.isPresent()){
item.get().setId("1q2w3e4r5t6y")
}
创建了可选的,这样代码可以在经过几十年之后,终于开始避免 null。
删除 .get(),return Optional 本身并使调用代码适当地处理它(就像在 returning 的情况下必须做的那样)空)。
我们可以像下面这样使用
.map(对象) .filter(可选::isPresent) .map(可选::获取) .orElse(null)