’Optional.get()’而不是’isCurrent()’检查

我用 Java 编写了以下搜索代码:

return getTableViewController().getMe().getColumns().stream()
.filter($ -> Database.equalsColumnName($.getId(), columnId))
.findFirst()
.get();

我希望按名字找到专栏,然后第一个找到就归还。

我知道有个案子什么都没发现,应该处理,但怎么处理呢?

这就是它想要的吗:

'Optional.get()' without 'isPresent()' check

如何修复? 我希望返回 null如果没有发现。

更新

好吧,好吧,我只是没有意识到,findFirst()返回 Optional

160093 次浏览

orElse(null)代替 get()

...findFirst().orElse(null);

如果存在则返回值,否则返回 null。传递的参数可能是 null(对于 orElseGetorElseThrow是禁止的)的文档

我的解决办法是这样检查

if(item.isPresent()){
item.get().setId("1q2w3e4r5t6y")
}

可选的是创建了这样的代码,经过这么多年,终于可以启动 避免 null 了。

去掉。Get () ,返回可选项本身,并让调用代码适当地处理它(就像在返回 null 的情况下必须做的那样)。

我们可以像下面这样使用

.map(Object)
.filter(Optional::isPresent)
.map(Optional::get)
.orElse(null)