Java ';可选。get()';没有';isPresent()';检查
我有以下Java搜索代码:Java ';可选。get()';没有';isPresent()';检查,java,java-8,java-stream,optional,Java,Java 8,Java Stream,Optional,我有以下Java搜索代码: return getTableViewController().getMe().getColumns().stream() .filter($ -> Database.equalsColumnName($.getId(), columnId)) .findFirst() .get(); 我希望按名称查找列并返回找到的第一个列 我知道有一种情况是什么也没有发现,应该进行处理,但如何处理呢 这就是它想要的咒骂: 'Optional.get(
return getTableViewController().getMe().getColumns().stream()
.filter($ -> Database.equalsColumnName($.getId(), columnId))
.findFirst()
.get();
我希望按名称查找列并返回找到的第一个列
我知道有一种情况是什么也没有发现,应该进行处理,但如何处理呢
这就是它想要的咒骂:
'Optional.get()' without 'isPresent()' check
?
如何修复?如果未找到任何内容,我希望返回null
更新
好吧,好吧,我只是没有意识到,findFirst()
返回可选的替换get()
返回值(如果存在),否则返回null
。文档说明传递的参数可能是空的(和是禁止的)。我的解决方案是这样检查它
if(item.isPresent()){
item.get().setId("1q2w3e4r5t6y")
}
创建Optional是为了让代码在这几十年之后能够最终开始避免null
删除.get(),返回可选项本身,并让调用代码适当地处理它(就像在返回null的情况下一样)。为什么?:)为什么orElse
以“or”开头?因为那是方法名。而else
是一个关键字。@Dims它只是getOrElse的一个简短形式,只是省略了get。对于可选,您通常应该使用orElse
而不是get
,因为get
如果值为空,将引发异常。@puhlenorElseGet()
接受供应商
,而orElse()
接受T
。这些都是不等价的。@bcsb1001这不是他想说的,“getOrElse”是他为了解释orElse
的目的而发明的名字;他的评论中没有提到orElseGet
)请注意,在Java中不应使用$
作为标识符::“只应在机械生成的源代码中使用$符号,或者很少用于访问遗留系统上预先存在的名称。”这在一定程度上是正确的。findFirst()具有以下规则:“当没有遭遇顺序时,它将从流中返回任何元素。”->因此,如果筛选器不返回匹配的元素,findFirst()将返回第一个元素(流之前为空除外)
if(item.isPresent()){
item.get().setId("1q2w3e4r5t6y")
}