如何替换“return optobj.ispresent()?新的obj2(optobj):空“在一个功能风格?

svdrlsy4  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(309)

我的ide(intelij)一直告诉我,我的代码“可以用函数式的单个表达式替换”,突出了 isPresent() :

return timestamp.isPresent() ? new Obj2(timestamp.get()) : null;
``` `timestamp` 初始化为可选:

Optional timestamp = ...

我的假设是我应该使用 `ifPresent` . 这样地 `timestamp.ifPresent(Obj2::new)` . 但是 `ifPresent` 是空的,我没有机会返回创建的对象。也不能再回来了 `null` . 我的代码有解决方案吗?
iyzzxitl

iyzzxitl1#

另外,比如 forEach() , ifPresent() 将消费者作为参数,以便引入副作用。您通常会使用它来打印或记录东西。

wgx48brx

wgx48brx2#

你说得对 ifPresent 返回void,因此不适合这种情况。ide建议您只需执行以下操作:

timestamp.map(Obj2::new).orElse(null);

它的意思是“如果 timestamp 具有当前状态,然后将其包含的对象传递到 Obj2 并返回这个新的 Obj2 其他示例( orElse )返回 null .
另一方面,intellij idea可以帮助您生成它所建议的代码。
例如,给出以下屏幕截图:

我只需单击“突出显示”部分并按“alt+enter”,intellij建议是否应该用函数样式替换条件。

相关问题