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 必须可以明确区分。
- 返回:
此实例的字符串表示形式