'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)