博客
关于我
利用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/

你可能感兴趣的文章
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
mutiplemap 总结
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>