java.lang.Object
java.util.Optional<T>
- 类型参数:
T- 值的类型
可能包含也可能不包含非
null值的容器对象。如果存在值,则 isPresent() 返回 true 。如果没有值,则认为该对象emptyisPresent() 返回 false 。
提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果不存在值则返回默认值)和 ifPresent() (如果存在值则执行操作)。
这是一个value-based类;程序员应该将 equal 的实例视为可互换的,并且不应使用实例进行同步,否则可能会发生不可预测的行为。例如,在未来的版本中,同步可能会失败。
- API 注意:
Optional主要用作方法返回类型,其中明确需要表示“无结果”,并且使用null可能会导致错误。类型为Optional的变量本身永远不应该是null;它应该始终指向一个Optional实例。- 自从:
- 1.8
-
方法总结
修饰符和类型方法描述static <T> Optional<T>empty()返回一个空的Optional实例。boolean指示某个其他对象是否“等于”此Optional。如果存在一个值,并且该值与给定的谓词匹配,则返回一个描述该值的Optional,否则返回一个空的Optional。<U> Optional<U>如果存在值,则返回将给定的Optional方位映射函数应用于该值的结果,否则返回空的Optional。get()如果存在值,则返回该值,否则抛出NoSuchElementException。inthashCode()返回值的哈希码(如果存在),否则如果不存在值则返回0(零)。void如果存在值,则使用该值执行给定的操作,否则不执行任何操作。voidifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) 如果存在值,则使用该值执行给定的操作,否则执行给定的基于空的操作。booleanisEmpty()如果值不存在,则返回true,否则返回false。boolean如果存在值,则返回true,否则返回false。<U> Optional<U>static <T> Optional<T>of(T value) 返回一个Optional描述给定的非null值。static <T> Optional<T>ofNullable(T value) 返回一个Optional描述给定值,如果非null,否则返回一个空的Optional。如果存在值,则返回描述该值的Optional,否则返回由提供函数生成的Optional。如果存在值,则返回该值,否则返回other。如果存在值,则返回该值,否则返回由提供函数生成的结果。如果存在值,则返回该值,否则抛出NoSuchElementException。orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在值,则返回该值,否则抛出由异常提供函数产生的异常。stream()如果存在值,则返回仅包含该值的顺序Stream,否则返回空的Stream。toString()返回适合调试的此Optional的非空字符串表示形式。
-
方法详情
-
empty
返回一个空的Optional实例。此Optional没有值。- API 注意:
-
尽管这样做可能很诱人,但请避免通过将
==或!=与Optional.empty()返回的实例进行比较来测试对象是否为空。不能保证它是单例。相反,使用isEmpty()或isPresent()。 - 类型参数:
T- 不存在值的类型- 返回:
-
一个空的
Optional
-
of
返回一个Optional描述给定的非null值。- 类型参数:
T- 值的类型- 参数:
value- 要描述的值,必须是非null- 返回:
-
具有当前值的
Optional - 抛出:
NullPointerException- 如果值为null
-
ofNullable
返回一个Optional描述给定值,如果非null,否则返回一个空的Optional。- 类型参数:
T- 值的类型- 参数:
value- 可能要描述的null值- 返回:
-
如果指定值是非
null,则为具有现值的Optional,否则为空Optional
-
get
如果存在值,则返回该值,否则抛出NoSuchElementException。- API 注意:
-
此方法的首选替代方法是
orElseThrow()。 - 返回:
-
这个
Optional描述的非null值 - 抛出:
NoSuchElementException- 如果没有值
-
isPresent
public boolean isPresent()如果存在值,则返回true,否则返回false。- 返回:
true如果存在值,否则false
-
isEmpty
public boolean isEmpty()如果值不存在,则返回true,否则返回false。- 返回:
true如果值不存在,否则false- 自从:
- 11
-
ifPresent
如果存在值,则使用该值执行给定的操作,否则不执行任何操作。- 参数:
action- 要执行的操作,如果存在值- 抛出:
NullPointerException- 如果值存在并且给定的操作是null
-
ifPresentOrElse
如果存在值,则使用该值执行给定的操作,否则执行给定的基于空的操作。- 参数:
action- 要执行的操作,如果存在值emptyAction- 如果不存在任何值,则要执行的基于空的操作- 抛出:
NullPointerException- 如果存在值并且给定的操作是null,或者不存在值并且给定的基于空的操作是null。- 自从:
- 9
-
filter
如果存在一个值,并且该值与给定的谓词匹配,则返回一个描述该值的Optional,否则返回一个空的Optional。- 参数:
predicate- 应用于值的谓词(如果存在)- 返回:
-
一个
Optional描述这个Optional的值,如果一个值存在并且该值匹配给定的谓词,否则一个空的Optional - 抛出:
NullPointerException- 如果谓词是null
-
map
如果存在值,则返回一个Optional描述(如同通过ofNullable(T))将给定映射函数应用于该值的结果,否则返回一个空的Optional。如果map函数返回
null结果,则此方法返回空Optional。- API 注意:
-
此方法支持对
Optional值进行后处理,无需显式检查返回状态。例如,以下代码遍历 URI 流,选择一个尚未处理的 URI,并从该 URI 创建路径,返回一个Optional<Path>:
这里,Optional<Path> p = uris.stream().filter(uri -> !isProcessedYet(uri)) .findFirst() .map(Paths::get);findFirst返回一个Optional<URI>,然后map返回一个URI(如果存在)。 - 类型参数:
U- 映射函数返回值的类型- 参数:
mapper- 应用于值的映射函数(如果存在)- 返回:
Optional描述将映射函数应用于此Optional的值的结果,如果存在值,否则为空Optional- 抛出:
NullPointerException- 如果map函数是null
-
flatMap
如果存在值,则返回将给定的Optional方位映射函数应用于该值的结果,否则返回空的Optional。此方法类似于
map(Function),但映射函数的结果已经是Optional,如果调用,flatMap不会将其包装在额外的Optional中。- 类型参数:
U- 映射函数返回的Optional值的类型- 参数:
mapper- 应用于值的映射函数(如果存在)- 返回:
-
如果存在值,则将
Optional轴承映射函数应用于此Optional的值,否则为空Optional - 抛出:
NullPointerException- 如果map函数是null或返回null结果
-
or
如果存在值,则返回描述该值的Optional,否则返回由提供函数生成的Optional。- 参数:
supplier- 生成要返回的Optional的提供函数- 返回:
-
如果存在值,则返回描述此
Optional值的Optional,否则返回由提供函数生成的Optional。 - 抛出:
NullPointerException- 如果提供函数是null或产生null结果- 自从:
- 9
-
stream
如果存在值,则返回仅包含该值的顺序Stream,否则返回空的Stream。- API 注意:
-
此方法可用于将可选元素的
Stream转换为现值元素的Stream:Stream<Optional<T>> os = .. Stream<T> s = os.flatMap(Optional::stream) - 返回:
-
作为
Stream的可选值 - 自从:
- 9
-
orElse
如果存在值,则返回该值,否则返回other。- 参数:
other- 如果不存在任何值,则返回该值。可能是null。- 返回:
-
值,如果存在,否则为
other
-
orElseGet
如果存在值,则返回该值,否则返回由提供函数生成的结果。- 参数:
supplier- 产生要返回的值的提供函数- 返回:
- 值(如果存在),否则为提供函数产生的结果
- 抛出:
NullPointerException- 如果没有值存在并且提供函数是null
-
orElseThrow
如果存在值,则返回该值,否则抛出NoSuchElementException。- 返回:
-
这个
Optional描述的非null值 - 抛出:
NoSuchElementException- 如果没有值- 自从:
- 10
-
orElseThrow
如果存在值,则返回该值,否则抛出由异常提供函数产生的异常。- API 注意:
-
对具有空参数列表的异常构造函数的方法引用可以用作提供者。例如,
IllegalStateException::new - 类型参数:
X- 要抛出的异常类型- 参数:
exceptionSupplier- 产生要抛出的异常的提供函数- 返回:
- 值,如果存在
- 抛出:
X- 如果没有值NullPointerException- 如果没有值存在并且异常提供函数是null
-
equals
指示某个其他对象是否“等于”此Optional。另一个对象被认为是相等的,如果:- 它也是一个
Optional和; - 两个实例都没有值,或者;
- 当前值通过
equals()彼此“相等”。
- 它也是一个
-
hashCode
public int hashCode()返回值的哈希码(如果存在),否则如果不存在值则返回0(零)。 -
toString
返回适合调试的此Optional的非空字符串表示形式。确切的表示格式未指定,并且可能因实现和版本而异。
-