public final class Optional<T> extends Object
isPresent()
将返回true
和get()
将返回值。
提供依赖于存在或不存在包含值的其他方法,例如orElse()
(如果值不存在则返回默认值)和ifPresent()
(如果值存在则执行代码块)。
这是一个value-based课; 使用身份敏感的操作(包括引用相等(的==
上的实例),标识哈希码,或同步) Optional
可具有不可预测的结果,应当避免。
Modifier and Type | Method and Description |
---|---|
static <T> Optional<T> |
empty()
返回一个空的
Optional 实例。
|
boolean |
equals(Object obj)
指示某个其他对象是否等于此可选项。
|
Optional<T> |
filter(Predicate<? super T> predicate)
如果一个值存在,并且该值给定的谓词相匹配时,返回一个
Optional 描述的值,否则返回一个空的
Optional 。
|
<U> Optional<U> |
flatMap(Function<? super T,Optional<U>> mapper)
如果一个值存在,应用提供的
Optional 映射函数给它,返回该结果,否则返回一个空的
Optional 。
|
T |
get()
如果
Optional 中有一个值,返回值,否则抛出
NoSuchElementException 。
|
int |
hashCode()
返回当前值的哈希码值(如果有的话),如果没有值,则返回0(零)。
|
void |
ifPresent(Consumer<? super T> consumer)
如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。
|
boolean |
isPresent()
返回
true 如果存在值,否则为
false 。
|
<U> Optional<U> |
map(Function<? super T,? extends U> mapper)
如果存在一个值,则应用提供的映射函数,如果结果不为空,则返回一个
Optional 结果的
Optional 。
|
static <T> Optional<T> |
of(T value)
返回具有
Optional 的当前非空值的Optional。
|
static <T> Optional<T> |
ofNullable(T value)
返回一个
Optional 指定值的Optional,如果非空,则返回一个空的
Optional 。
|
T |
orElse(T other)
返回值如果存在,否则返回
other 。
|
T |
orElseGet(Supplier<? extends T> other)
返回值(如果存在),否则调用
other 并返回该调用的结果。
|
<X extends Throwable> |
orElseThrow(Supplier<? extends X> exceptionSupplier)
返回包含的值(如果存在),否则抛出由提供的供应商创建的异常。
|
String |
toString()
返回此可选的非空字符串表示,适用于调试。
|
public static <T> Optional<T> empty()
Optional
实例。
此可选项不存在值。
Option.empty()
与==
,则避免测试对象是否为空。
不能保证是单身人士。
相反,请使用isPresent()
。
T
- 不存在值的类型
Optional
public static <T> Optional<T> of(T value)
Optional
的当前非空值的Optional。
T
- 该类的值
value
- 要存在的值,它必须是非空值
Optional
的值存在
NullPointerException
- 如果值为空
public static <T> Optional<T> ofNullable(T value)
Optional
指定值的Optional,如果非空,则返回一个空的
Optional
。
T
- 该类的值
value
- 可能为null的值来描述
Optional
,如果指定的值不为空,则为当前值,否则为空
Optional
public T get()
Optional
中存在值,则返回值,否则抛出
NoSuchElementException
。
Optional
非空值
NoSuchElementException
- 如果没有值存在
isPresent()
public boolean isPresent()
true
,否则为
false
。
true
若有存在值,否则为
false
public void ifPresent(Consumer<? super T> consumer)
consumer
- 如果存在值,则执行块
NullPointerException
- 如果值存在且
consumer
为空
public Optional<T> filter(Predicate<? super T> predicate)
Optional
描述的值,否则返回一个空的
Optional
。
predicate
- 一个应用于该值的谓词(如果存在)
Optional
描述此的值
Optional
一个值是否存在,并且值给定的谓词相匹配,否则一个空
Optional
NullPointerException
- 如果谓词为空
public <U> Optional<U> map(Function<? super T,? extends U> mapper)
Optional
结果的Optional
。
否则返回一个空的Optional
。
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
- 应用于值的映射函数(如果存在)
Optional
描述了将映射函数应用于该值
Optional
的值的
Optional
,如果存在值,否则为空
Optional
NullPointerException
- 如果映射函数为空
public <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
Optional
映射函数给它,返回该结果,否则返回一个空的Optional
。
这种方法类似于map(Function)
,但是提供的映射器是一个结果已经是Optional
映射器,如果被调用, flatMap
不会用额外的Optional
。
U
- 返回的
Optional
的类型参数
mapper
- 应用于值的映射函数,如果存在映射函数
Optional
荷瘤映射函数此的值
Optional
,如果一个值存在,否则一个空
Optional
NullPointerException
- 如果映射函数为空或返回空结果
public T orElse(T other)
other
。
other
- 如果没有值存在则返回的值可以为null
other
public T orElseGet(Supplier<? extends T> other)
other
并返回该调用的结果。
other
- 一个
Supplier
,如果没有值,则返回其结果
other.get()
NullPointerException
- 如果值不存在,并且
other
为空
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X extends Throwable
IllegalStateException::new
X
- 要抛出的异常的类型
exceptionSupplier
- 将返回要抛出的异常的供应商
X
- 如果没有值存在
NullPointerException
- 如果没有值,
exceptionSupplier
为空
X extends Throwable
public boolean equals(Object obj)
Optional
和; equals()
“相等”。 equals
在类别
Object
obj
- 要进行相等测试的对象
false
Object.hashCode()
, HashMap
public int hashCode()
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.