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

你可能感兴趣的文章
Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
查看>>
oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
查看>>
Oracle11G基本操作
查看>>
Oracle11g服务详细介绍及哪些服务是必须开启的?
查看>>
Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
查看>>
oracle12安装软件后安装数据库,然后需要自己配置监听
查看>>
Oracle——08PL/SQL简介,基本程序结构和语句
查看>>
Oracle——distinct的用法
查看>>
Oracle、MySQL、SQL Server架构大对比
查看>>
oracle下的OVER(PARTITION BY)函数介绍
查看>>
Oracle中DATE数据相减问题
查看>>
Oracle中merge into的使用
查看>>
oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
查看>>
oracle中sql的case语句运用--根据不同条件去排序!
查看>>
Oracle中Transate函数的使用
查看>>
oracle中关于日期问题的汇总!
查看>>
Oracle中常用的语句
查看>>
Oracle中序列的操作以及使用前对序列的初始化
查看>>
oracle中新建用户和赋予权限
查看>>
Oracle中的NVL,NVL2,NULLIF以及COALESCE函数使用
查看>>