如何用Java Optional简化空值判断的日期格式化代码?
使用Optional简化空值判断的Java代码实现
你可以通过Optional.ofNullable()结合map()和orElse()方法实现,一行代码就能替代原有的if-else逻辑,同时保持简洁优雅:
String zdtstr = Optional.ofNullable(getMyTime()) .map(zdt -> zdt.format(myformatter)) .orElse("???");
代码说明:
Optional.ofNullable(getMyTime()):将getMyTime()可能返回的null值安全包装为Optional对象,避免空指针风险。map(zdt -> zdt.format(myformatter)):如果Optional内部存在非空的ZonedDateTime对象,就执行格式化操作将其转为字符串;如果是空值,map会直接返回空Optional,跳过格式化步骤。orElse("???"):如果Optional为空(即原zdt是null),返回默认值"???";如果非空,则返回map处理后的格式化字符串。
关于isPresentOrElse的说明:
isPresentOrElse是消费型方法,它接收的两个参数都是无返回值的Consumer接口实现,仅适合执行副作用操作(比如打印日志、更新状态),无法直接返回你需要的字符串结果,因此不适合这个场景。
如果你的默认值生成需要额外计算开销(本例中"???"是常量,无需额外计算),可以改用orElseGet(),它接收Supplier接口,只有在需要默认值时才会执行:
String zdtstr = Optional.ofNullable(getMyTime()) .map(zdt -> zdt.format(myformatter)) .orElseGet(() -> "???");
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

