Ezio's Blog
Posts Categories Tags Music Mood About
Ezio's Blog· Light
☰ Menu
Posts Categories Tags Music Mood About
Expand all Back to top Go to bottom

Java8-Optional

Author: Ezio Date: October 12, 2022  16:36:32 Category: Java

Optional 类是一个可以为 null 的容器对象。如果值存在则 isPresent() 方法会返回 true,调用 get() 方法会返回该对象。Optional提供很多有用的方法,这样我们就不用显式进行空值检测,它旨在减少代码中的 NullPointerExceptions,虽然还不能完全消除这些异常。

创建

1
2
3
Optional.empty();          //创建一个空的 Optional 实例
Optional.of(T t); //创建一个 Optional 实例,当 t 为 null 时抛出异常
Optional.ofNullable(T t); //创建一个 Optional 实例,但当 t 为 null 时不会抛出异常,而是返回一个空的实例

获取

1
get();  //获取optional实例中的对象,当 optional 容器为空时报错

判断

1
2
3
4
5
6
7
8
9
10
//判断 optional 是否为空,如果空则返回 false,否则返回 true
isPresent();
//如果 optional 不为空,则将 optional 中的对象传给 Comsumer 函数
ifPresent(Consumer c);
//如果 optional 不为空,则返回 optional 中的对象;如果为 null,则返回 other 这个默认值
orElse(T other);
//如果 optional 不为空,则返回 optional 中的对象;如果为 null,则使用 Supplier 函数生成默认值 other
orElseGet(Supplier<T> other);
//如果 optional 不为空,则返回 optional 中的对象;如果为 null,则抛出 Supplier 函数生成的异常
orElseThrow(Supplier<X> exception);

过滤

1
2
filter(Predicate<T> p);  
//如果 optional 不为空,则执行断言函数 p,如果 p 的结果为 true,则返回原本的 optional,否则返回空的 optional

映射

1
2
3
4
5
6
//如果 optional 不为空,则将 optional 中的对象 t 映射成另外一个对象 u,并将 u 存放到一个新的 optional 容器中。
map(Function<T, U> mapper);
//跟上面一样,在 optional 不为空的情况下,将对象 t 映射成另外一个 optional
flatMap(Function< T,Optional<U>> mapper);

//区别:map会自动将u放到optional中,而flatMap则需要手动给u创建一个optional

Author: Ezio

Permalink: https://ezioy.cn/2022/10/12/Java8-Optional/

License: Copyright (c) 2019 CC-BY-NC-4.0 LICENSE

Slogan: Nothing is true,Everything is permitted

Tag(s): # Java
back · home
Mac下安装Docker MySQL数据库开发规范
Ezio © 2019 - 2026 | Powered by Hexo & Chic | 访客数量:   浏览次数: | 渝公网安备50011302222043 | 渝ICP备2023013933号-1