java - 如何以函数式风格替换 "return optObj.isPresent() ? new Obj2(optObj) : null"?

标签 java java-8 ide option-type

我的 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 可以帮助您生成它建议的代码。

例如,给出以下屏幕截图:

enter image description here

我只需单击“突出显示”的部分并按“ALT + ENTER”,IntelliJ 就会建议是否应该用功能样式替换条件。

关于java - 如何以函数式风格替换 "return optObj.isPresent() ? new Obj2(optObj) : null"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53652866/

相关文章:

java - 如何在没有 if 构造的情况下引发异常

ide - Netbeans 现在是一个很好的 C/C++ IDE 吗?

java - 疯狂的 MS SQL Server JDBC 驱动程序在日期时间字段或时区问题?

java - 配置 MDB 以监听多个队列

java - 未返回 dateTimeFormatter 短时区名称

macos - Grails GGTS IDE GrailsProcessDiedException : Grails process died

android - :app:compileDebugJava Failed at Android Studio IDE

java - 在tomcat中重新加载类文件

java - 使用 dockerfile 中的外部库编译并运行 java

java - 为什么类中的Optional成员变量的默认值为null?