Optional静态类简介以及用法
1、简介
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。
2、命令详解
2.1 empty
public static <T> Optional<T> empty()
功能:返回一个空
Optional实例。此 Optional 不存在任何值。
- API注意事项:
尽管这样做可能很诱人,但请避免通过与
==返回的实例 进行比较来测试对象是否为空Option.empty()。不能保证它是单例。相反,使用isPresent().
- 类型参数:
T- 不存在值的类型
- 返回:
- 一个空的
Optional
2.2 of
public static <T> Optional<T> of(T value)
功能:返回
Optional具有指定当前非空值的 。
- 类型参数:
T- 值的类别
- 参数:
value- 要存在的值,必须为非空
- 返回:
一个
Optional与存在的值
- 抛出:
NullPointerException- 如果值为空
2.3 ofNullable
public static <T> Optional<T> ofNullable(T value)
功能:返回
Optional描述指定的值,如果非空,否则返回空Optional。
- 类型参数:
T- 值的类别
- 参数:
value- 要描述的可能为空的值
- 返回:
一个
Optional与本值,如果指定的值非空,否则一个空Optional
2.4 get
public T get()
功能:如果 this 中存在一个值
Optional,则返回该值,否则抛出NoSuchElementException。
- 返回:
this 持有的非空值
Optional
- 抛出:
NoSuchElementException- 如果没有价值存在
2.5 isPresent
public boolean isPresent()
功能:
true如果存在值则返回,否则返回false。
- 返回:
true如果存在一个值,否则false
2.6 ifPresent
public void ifPresent(Consumer<? super T> consumer)
功能:如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。
- 参数:
consumer- 如果存在值则执行块
- 抛出:
NullPointerException- 如果值存在并且consumer为空
2.7 filter
public Optional<T> filter(Predicate<? super T> predicate)
功能:如果存在一个值,并且该值与给定的谓词匹配,则返回一个
Optional描述该值的值,否则返回一个空值Optional。
- 参数:
predicate- 应用于该值的谓词(如果存在)
- 返回:
一个
Optional描述此值Optional一个值是否存在,并且值给定的谓词相匹配,否则一个空Optional
- 抛出:
NullPointerException- 如果谓词为空
2.8 map
public <U> Optional<U> map(Function<? super T,? extends U> mapper)
功能:如果存在一个值,则对其应用提供的映射函数,如果结果为非空,则返回一个
Optional描述结果的值。否则返回一个空的Optional。
- API注意事项:
此方法支持对可选值进行后处理,而无需显式检查返回状态。例如,以下代码遍历文件名流,选择尚未处理的文件名,然后打开该文件,返回
Optional<FileInputStream>:Optional<FileInputStream> fis = names.stream().filter(name -> !isProcessedYet(name)) .findFirst() .map(name -> new FileInputStream(name));在这里,findFirst返回一个Optional<String>,然后map返回Optional<FileInputStream>所需文件的一个(如果存在)。
- 类型参数:
U- 映射函数结果的类型
- 参数:
mapper- 应用于该值的映射函数(如果存在)
- 返回:
an
Optional描述将映射函数应用于 this 的值的结果Optional,如果存在值,否则为空Optional
- 抛出:
NullPointerException- 如果映射函数为空
2.9 flatMap
public <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
功能:如果存在一个值,则将提供的
Optional-bearing 映射函数应用于它,返回该结果,否则返回一个空的Optional。此方法类似于map(Function),但提供的映射器的结果已经是Optional,并且如果被调用,flatMap则不会用额外的Optional.
- 类型参数:
U-Optional返回的类型参数
- 参数:
mapper- 应用于值的映射函数,如果存在映射函数
- 返回:
将
Optional-bearing 映射函数应用于 this 的值的结果Optional,如果存在值,否则为空Optional
- 抛出:
NullPointerException- 如果映射函数为空或返回空结果
2.10 orElse
public T orElse(T other)
功能:如果存在则返回值,否则返回
other。
- 参数:
other- 如果不存在值则返回值,可能为空
- 返回:
值,如果存在,否则
other
2.11 orElseGet
public T orElseGet(Supplier<? extends T> other)
功能:如果存在则返回值,否则调用
other并返回该调用的结果。
- 参数:
other-Supplier如果不存在值则返回其结果
- 返回:
值(如果存在)否则结果
other.get()
- 抛出:
NullPointerException- 如果值不存在并且other为空
2.12 orElseThrow
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
throws X extends Throwable
功能:返回包含的值(如果存在),否则抛出由提供的供应商创建的异常。
- API注意事项:
对带有空参数列表的异常构造函数的方法引用可以用作提供者。例如,
IllegalStateException::new
- 类型参数:
X- 要抛出的异常类型
- 参数:
exceptionSupplier- 将返回要抛出的异常的供应商
- 返回:
现值
- 抛出:
X- 如果没有价值存在
NullPointerException- 如果没有值存在并且exceptionSupplier为空
X extends Throwable
2.13 equals
public boolean equals(Object obj)
功能:指示某个其他对象是否“等于”此 Optional。在以下情况下,另一个对象被认为是相等的:
- 它也是一个
Optional和;- 两个实例都没有价值存在或;
- 当前值通过 彼此“相等”
equals()。- 覆盖:
equals在班上Object
- 参数:
obj- 要测试是否相等的对象
- 返回:
{code true} 如果另一个对象“等于”这个对象,否则
false
2.14 hashCode
public int hashCode()
功能:返回当前值的哈希码值(如果有),如果没有值则返回 0(零)。
- 覆盖:
hashCode在班上Object
- 返回:
当前值的哈希码值,如果没有值则为 0
2.15 toString
public String toString()
功能:返回适合调试的此 Optional 的非空字符串表示形式。确切的表示格式未指定,可能因实现和版本而异。
- 覆盖:
toString在班上Object
- 实施要求:
如果存在值,则结果必须在结果中包含其字符串表示。Empty 和present Optionals 必须可以明确区分。
- 返回:
此实例的字符串表示形式