java Optional

我还没用过java8的一些语法,有点老古董了,记录下Optional怎么用。

从源码看,Optional内部持有一个对象, 有一些api对这个对象进行判空处理。

静态方法of ,生成Optional对象, 但这个value不能为空,因为构造器判断value为空直接抛异常。

复制代码

如果值可以为空,调用下面的ofNullable方法生成Optional。

复制代码

常用方法:

1、get方法,value确定非空再调用该方法,可以强制开发处理空值。

复制代码

2、isPresent、isEmpty方法, 判断是否有值

复制代码

3、ifPresent 值非空时,传该值执行一个操作。

复制代码
public void ifPresent(Consumer<? super T> action) {
    if (this.value != null) {
        action.accept(this.value);
    }
}

4、ifPresentOrElse方法, 值非空时执行一个操作,否则执行另一个操作

5、filter 方法,判断值是否满足一个条件

6、map 方法, 转化数据。

7、flatMap方法,同map,但会检查转化后的数据是否为空,转化为null会抛异常。

8、当Optional存的值为空,则生成一个Optional(值仍然可能为空)

9、stream方法,生成流

10、orElseGet ,获取值,值为null则生成一个值

11、 还有空值就抛异常的方法。

支持链式调用,可与方法引用配合使用,比较方便,

java 复制代码
Optional.ofNullable(user)
        .map(User::getName)
        .filter(name -> !name.isEmpty())
        .orElse("Unknown");

总结:Optional 主要是对数据进行各种处理,比如空值处理,数据转化、数据过滤、异常处理等。

相关推荐
Wpa.wk16 小时前
性能测试工具 - JMeter工具组件介绍一
java·经验分享·测试工具·jmeter·性能测试
虫小宝16 小时前
个微iPad协议场景下Java后端的协议解析异常排查与问题定位技巧
java·svn·ipad
vyuvyucd16 小时前
Python虚拟环境终极指南:venv到uv进阶
开发语言·python·uv
程序媛徐师姐16 小时前
Java基于微信小程序的鲜花销售系统,附源码+文档说明
java·微信小程序·鲜花销售小程序·java鲜花销售小程序·鲜花销售微信小程序·java鲜花销售系统小程序·java鲜花销售微信小程序
Tim_1016 小时前
【C++入门】05、复合类型-数组
开发语言·c++·算法
无限进步_16 小时前
【C语言&数据结构】另一棵树的子树:递归思维的双重奏
c语言·开发语言·数据结构·c++·算法·github·visual studio
佑白雪乐16 小时前
<Python第1集>
开发语言·python
菜还不练就废了16 小时前
26.1.12|JavaSE复盘补充,整到哪里算哪里(一)
java·开发语言
摇滚侠16 小时前
Kong API 列表加 curl 访问案例 通过 curl 修改 router 的 method
java·kong
ShuiShenHuoLe16 小时前
maven配置阿里源
java·数据库·maven