我的 IDE (InteliJ) 不断指出我的代码“可以用函数式风格的单个表达式替换”,突出显示 isPresent()
:
return timestamp.isPresent() ? new Obj2(timestamp.get()) : null;
timestamp
的初始化类似于可选:
Optional<Date> timestamp = ...
我的假设是我应该使用 ifPresent
。就像这样 timestamp.ifPresent(Obj2::new)
。但是 ifPresent
是无效的,我没有机会返回创建的对象。也不能返回null
。我的代码有解决方案吗?
最佳答案
您说 ifPresent
返回 void 是正确的,因此不适合这种情况。您的 IDE 建议您可以简单地执行以下操作:
timestamp.map(Obj2::new).orElse(null);
这读作“如果可选 timestamp
具有当前状态,则将其包含的对象传递给 Obj2
构造函数并返回这个新的 Obj2
” > 实例,否则 (orElse
) 返回 null
。
另一方面,IntelliJ IDEA 可以帮助您生成它建议的代码。
例如,给出以下屏幕截图:
我只需单击“突出显示”的部分并按“ALT + ENTER”,IntelliJ 就会建议是否应该用功能样式替换条件。
关于java - 如何以函数式风格替换 "return optObj.isPresent() ? new Obj2(optObj) : null"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53652866/