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 主要是对数据进行各种处理,比如空值处理,数据转化、数据过滤、异常处理等。

相关推荐
沐浴露z3 分钟前
一篇文章详解Kafka Broker
java·分布式·kafka
Nero185 分钟前
代码随想录二刷第二十一天 | 222.完全二叉树的节点个数、110.平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、513.找树左下角的值
java
扶苏-su8 分钟前
Java---StringBuilder
java·开发语言
我来整一篇10 分钟前
[java] JVM 内存泄漏分析案例
java·开发语言·jvm
程序员黄同学17 分钟前
解释 Python 中的属性查找顺序(Attribute Lookup Order)
开发语言·python
程序员鱼皮23 分钟前
前后端分离,千万别再搞错了!
java·前端·后端·计算机·程序员·编程·软件开发
苏打水com24 分钟前
深入浅出 JavaScript 异步编程:从回调地狱到 Async/Await
开发语言·javascript·ecmascript
Gu_yyqx37 分钟前
IDEA 中 Tomcat 部署 Java Web 项目
java·tomcat·maven
egoist202337 分钟前
[linux仓库]线程与进程的较量:资源划分与内核实现的全景解析[线程·贰]
linux·开发语言·线程·进程·资源划分
SimonKing37 分钟前
【开发者必备】Spring Boot 2.7.x:WebMvcConfigurer配置手册来了(五)!
java·后端·程序员