博客
关于我
利用JDK8提供的Optional简化if else
阅读量:570 次
发布时间:2019-03-11

本文共 2103 字,大约阅读时间需要 7 分钟。

如何减少if else(条件判断)代码的冗长性?在软件开发中,条件判断是避免空指针异常的一种常见做法,但繁多的if else会让代码显得臃肿。Java 8提供的Optional类为我们提供了一种更简洁的解决方案。

1. Optional的基本使用

Optional类是一个可以包含或不包含值的容器,并专门用于处理可能 null 的值。其核心方法包括:

  • ofNullable(Object obj):如果obj为null,则返回一个不包含值的Optional;否则返回包含该值的Optional。
  • map(Function Tony):如果Optional包含值,执行Tony函数,返回一个新的Optional;若值为null,则返回一个不包含值的Optional。
  • orElseGet(Supplier supplier):如果Optional包含值,返回其值;若值为null,则运行supplier函数返回一个值。

2. 示例一:时间字符串转换

假设selectStartTime()从数据库中查询LocalDateTime值,则getStartTime()方法原本需要五行代码:

private String getStartTime() {    LocalDateTime dateTime = selectStartTime();    if (dateTime == null) {        return "2020-01-01 00:00:00";    }    return dateTimeToString(dateTime);}
private String getStartTime() {    return Optional.ofNullable(selectStartTime())        .map(dateTime -> dateTimeToString(dateTime))        .orElseGet(() -> "2020-01-01 00:00:00");}

3. 示例二:用户查询优化

原代码:

User user = getCacheUser(1);if (user == null) {    user = selectUserById(1);}

简化代码:

User user = Optional.ofNullable(getCacheUser(1))    .orElseGet(() -> selectUserById(1));

4. 示例三:多层条件判断

此前需要多层条件判断:

public String getCity(User user) throws Exception {    if (user != null) {        if (user.getAddress() != null) {            Address address = user.getAddress();            if (address.getCity() != null) {                return address.getCity();            }        }    }    throw new Exception("对象为空");}

简化后:

public String getCity(User user) throws Exception {    return Optional.ofNullable(user)        .map(u -> u.getAddress())        .map(a -> a.getCity())        .orElseThrow(() -> new Exception("对象为空"));}

5. 示例四:深入条件判断

简化多层条件判断:

public User getUser(User user) {    if (user != null) {        String name = user.getName();        if ("zhangsan".equals(name)) {            return user;        }    } else {        user = new User("zhangsan");        return user;    }}

简化后:

public User getUser(User user) {    return Optional.ofNullable(user)        .filter(u -> "zhangsan".equals(u.getName()))        .orElseGet(() -> new User("zhangsan"));}

通过使用Optional的链式方法,我们减少了冗长的条件判断,使代码变得简洁明了。这种方式不仅提高了可读性,还更安全地处理了可能的null值情况。

转载地址:http://amnvz.baihongyu.com/

你可能感兴趣的文章
Network-Emulator Network-Emulator-Toolkit网络模拟器使用
查看>>
Networkx写入Shape文件
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
NetworkX:是否为每个节点添加超链接?
查看>>
network小学习
查看>>
Netwox网络工具使用详解
查看>>
Net与Flex入门
查看>>
Net任意String格式转换为DateTime类型
查看>>
net包之IPConn
查看>>
net发布的dll方法和类显示注释信息(字段说明信息)[图解]
查看>>
Net和T-sql中的日期函数操作
查看>>
Net处理html页面元素工具类(HtmlAgilityPack.dll)的使用
查看>>
Net操作Excel(终极方法NPOI)
查看>>
Net操作配置文件(Web.config|App.config)通用类
查看>>
net网络查看其参数state_dict,data,named_parameters
查看>>
Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载
查看>>
NeurIPS(神经信息处理系统大会)-ChatGPT4o作答
查看>>
neuroph轻量级神经网络框架
查看>>
Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
查看>>