关于Optional
前言
本次向大家介绍下java Optional类
源码描述
官方的描述是这样的:
A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.
Additional methods that depend on the presence or absence of a contained value are provided, such as orElse() (return a default value if value not present) and ifPresent() (execute a block of code if the value is present).
This is a value-based class; use of identity-sensitive operations (including reference equality (==), identity hash code, or synchronization) on instances of Optional may have unpredictable results and should be avoided.
大概的意思是:
这是一个容器对象,可能包含或不包含一个非空值,如果当前存在一个非空值,isPresent()方法将会返回true,并且调用get()方法,会得到该值。
提供了依赖于所包含值的存在与否的其他方法,例如orElse()(如果值不存在,则返回默认值)和ifPresent()(如果值存在,则执行代码块)。
这是一个值的基类;在Optional实例上使用标识敏感操作(包括引用相等(=)、标识哈希代码或同步)可能会产生不可预测的结果,应避免。
具体方法
1.empty()
静态方法返回一个空的Optional实例
package com.study.oth;
import java.util.Optional;
/**
* @author bxz
* @date 2021/11/25
*/
public class OptionalDemo {
public static void main(String[] args) {
Optional<Object> empty = Optional.empty();
}
}
debug下看到通过empty()方法创建了一个不包含非空值的Optional实例。
2.filter
.filter(Predicate<? super T> predicate) 过滤在集合流式处理中用的比较多,当过滤条件不满足时返回一个空的及不包含非空值的Optional实例
3.flatMap
flatMap(Function<? super T,Optional> mapper) 转换操作
4.ifPresent
ifPresent(Consumer<? super T> consumer) 空值判断,如果不为空则执行操作 (无返回值)
5.isPresent()
isPresent() 判断当前Optional是否有值
6.map
map(Function<? super T,? extends U> mapper) 一对一映射
7.of
of(T value) 返回一个包含非空值的Optional实体,其中value不能为null否则抛空指针异常
8.ofNullable
ofNullable(T value) 返回一个包含非空值或不包含非空值的Optional实体,取决于传入参数value是否为null,这个方法用于value是否为空不确定的情况
9.orElse
orElse(T other) 获Optional中的值,如果Optional包含非空值,则返回该值,否则返回参数other传入的值
10.orElseGet
orElseGet(Supplier<? extends T> other) 也是获取Optional中的值,与orElse()不同的是,该方法传入一个函数,并将该函数的返回值作为Optional不包含非空值时返回的值
11.orElseThrow
orElseThrow(Supplier<? extends X> exceptionSupplier) 还是获取Optional中的非空值,不过当Optional包含非空值时抛异常
12.get
get() 获取Optional的非空值,如果Optional不包含非空值则抛异常