Optional
public
final
class
Optional
extends Object
java.lang.Object | |
↳ | java.util.Optional<T> |
A container object which may or may not contain a non-null
value.
If a value is present, isPresent()
returns true
. If no
value is present, the object is considered empty and
isPresent()
returns false
.
Additional methods that depend on the presence or absence of a contained
value are provided, such as orElse()
(returns a default value if no value is present) and
ifPresent()
(performs an
action if a value is present).
This is a value-based class; programmers should treat instances that are equal as interchangeable and should not use instances for synchronization, or unpredictable behavior may occur. For example, in a future release, synchronization may fail.
Summary
Public methods | |
---|---|
static
<T>
Optional<T>
|
empty()
Returns an empty |
boolean
|
equals(Object obj)
Indicates whether some other object is "equal to" this |
Optional<T>
|
filter(Predicate<? super T> predicate)
If a value is present, and the value matches the given predicate,
returns an |
<U>
Optional<U>
|
flatMap(Function<? super T, ? extends Optional<? extends U>> mapper)
If a value is present, returns the result of applying the given
|
T
|
get()
If a value is present, returns the value, otherwise throws
|
int
|
hashCode()
Returns the hash code of the value, if present, otherwise |
void
|
ifPresent(Consumer<? super T> action)
If a value is present, performs the given action with the value, otherwise does nothing. |
void
|
ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
If a value is present, performs the given action with the value, otherwise performs the given empty-based action. |
boolean
|
isEmpty()
If a value is not present, returns |
boolean
|
isPresent()
If a value is present, returns |
<U>
Optional<U>
|
map(Function<? super T, ? extends U> mapper)
If a value is present, returns an |
static
<T>
Optional<T>
|
of(T value)
Returns an |
static
<T>
Optional<T>
|
ofNullable(T value)
Returns an |
Optional<T>
|
or(Supplier<? extends Optional<? extends T>> supplier)
If a value is present, returns an |
T
|
orElse(T other)
If a value is present, returns the value, otherwise returns
|
T
|
orElseGet(Supplier<? extends T> supplier)
If a value is present, returns the value, otherwise returns the result produced by the supplying function. |
<X extends Throwable>
T
|
orElseThrow(Supplier<? extends X> exceptionSupplier)
If a value is present, returns the value, otherwise throws an exception produced by the exception supplying function. |
T
|
orElseThrow()
If a value is present, returns the value, otherwise throws
|
Stream<T>
|
stream()
If a value is present, returns a sequential |
String
|
toString()
Returns a non-empty string representation of this |
Inherited methods | |
---|---|
Public methods
empty
public static Optional<T> empty ()
Returns an empty Optional
instance. No value is present for this
Optional
.
API Note:
- Though it may be tempting to do so, avoid testing if an object is empty
by comparing with
==
or!=
against instances returned byOptional.empty()
. There is no guarantee that it is a singleton. Instead, useisEmpty()
orisPresent()
.
Returns | |
---|---|
Optional<T> |
an empty Optional |
equals
public boolean equals (Object obj)
Indicates whether some other object is "equal to" this Optional
.
The other object is considered equal if:
- it is also an
Optional
and; - both instances have no value present or;
- the present values are "equal to" each other via
equals()
.
Parameters | |
---|---|
obj |
Object : an object to be tested for equality |
Returns | |
---|---|
boolean |
true if the other object is "equal to" this object
otherwise false |
filter
public Optional<T> filter (Predicate<? super T> predicate)
If a value is present, and the value matches the given predicate,
returns an Optional
describing the value, otherwise returns an
empty Optional
.
Parameters | |
---|---|
predicate |
Predicate : the predicate to apply to a value, if present |
Returns | |
---|---|
Optional<T> |
an Optional describing the value of this
Optional , if a value is present and the value matches the
given predicate, otherwise an empty Optional |
Throws | |
---|---|
NullPointerException |
if the predicate is null |
flatMap
public Optional<U> flatMap (Function<? super T, ? extends Optional<? extends U>> mapper)
If a value is present, returns the result of applying the given
Optional
-bearing mapping function to the value, otherwise returns
an empty Optional
.
This method is similar to map(java.util.function.Function)
, but the mapping
function is one whose result is already an Optional
, and if
invoked, flatMap
does not wrap it within an additional
Optional
.
Parameters | |
---|---|
mapper |
Function : the mapping function to apply to a value, if present |
Returns | |
---|---|
Optional<U> |
the result of applying an Optional -bearing mapping
function to the value of this Optional , if a value is
present, otherwise an empty Optional |
Throws | |
---|---|
NullPointerException |
if the mapping function is null or
returns a null result |
get
public T get ()
If a value is present, returns the value, otherwise throws
NoSuchElementException
.
API Note:
- The preferred alternative to this method is
orElseThrow()
.
Returns | |
---|---|
T |
the non-null value described by this Optional |
Throws | |
---|---|
NoSuchElementException |
if no value is present |
hashCode
public int hashCode ()
Returns the hash code of the value, if present, otherwise 0
(zero) if no value is present.
Returns | |
---|---|
int |
hash code value of the present value or 0 if no value is
present |
ifPresent
public void ifPresent (Consumer<? super T> action)
If a value is present, performs the given action with the value, otherwise does nothing.
Parameters | |
---|---|
action |
Consumer : the action to be performed, if a value is present |
Throws | |
---|---|
NullPointerException |
if value is present and the given action is
null |
ifPresentOrElse
public void ifPresentOrElse (Consumer<? super T> action, Runnable emptyAction)
If a value is present, performs the given action with the value, otherwise performs the given empty-based action.
Parameters | |
---|---|
action |
Consumer : the action to be performed, if a value is present |
emptyAction |
Runnable : the empty-based action to be performed, if no value is
present |
Throws | |
---|---|
NullPointerException |
if a value is present and the given action
is null , or no value is present and the given empty-based
action is null . |
isEmpty
public boolean isEmpty ()
If a value is not present, returns true
, otherwise
false
.
Returns | |
---|---|
boolean |
true if a value is not present, otherwise false |
isPresent
public boolean isPresent ()
If a value is present, returns true
, otherwise false
.
Returns | |
---|---|
boolean |
true if a value is present, otherwise false |
map
public Optional<U> map (Function<? super T, ? extends U> mapper)
If a value is present, returns an Optional
describing (as if by
ofNullable(T)
) the result of applying the given mapping function to
the value, otherwise returns an empty Optional
.
If the mapping function returns a null
result then this method
returns an empty Optional
.
API Note:
- This method supports post-processing on
Optional
values, without the need to explicitly check for a return status. For example, the following code traverses a stream of URIs, selects one that has not yet been processed, and creates a path from that URI, returning anOptional<Path>
: Here,Optional<Path> p = uris.stream().filter(uri -> !isProcessedYet(uri)) .findFirst() .map(Paths::get);
findFirst
returns anOptional<URI>
, and thenmap
returns anOptional<Path>
for the desired URI if one exists.
Parameters | |
---|---|
mapper |
Function : the mapping function to apply to a value, if present |
Returns | |
---|---|
Optional<U> |
an Optional describing the result of applying a mapping
function to the value of this Optional , if a value is
present, otherwise an empty Optional |
Throws | |
---|---|
NullPointerException |
if the mapping function is null |
of
public static Optional<T> of (T value)
Returns an Optional
describing the given non-null
value.
Parameters | |
---|---|
value |
T : the value to describe, which must be non-null |
Returns | |
---|---|
Optional<T> |
an Optional with the value present |
Throws | |
---|---|
NullPointerException |
if value is null |
ofNullable
public static Optional<T> ofNullable (T value)
Returns an Optional
describing the given value, if
non-null
, otherwise returns an empty Optional
.
Parameters | |
---|---|
value |
T : the possibly-null value to describe |
Returns | |
---|---|
Optional<T> |
an Optional with a present value if the specified value
is non-null , otherwise an empty Optional |
or
public Optional<T> or (Supplier<? extends Optional<? extends T>> supplier)
If a value is present, returns an Optional
describing the value,
otherwise returns an Optional
produced by the supplying function.
Parameters | |
---|---|
supplier |
Supplier : the supplying function that produces an Optional
to be returned |
Returns | |
---|---|
Optional<T> |
returns an Optional describing the value of this
Optional , if a value is present, otherwise an
Optional produced by the supplying function. |
Throws | |
---|---|
NullPointerException |
if the supplying function is null or
produces a null result |
orElse
public T orElse (T other)
If a value is present, returns the value, otherwise returns
other
.
Parameters | |
---|---|
other |
T : the value to be returned, if no value is present.
May be null . |
Returns | |
---|---|
T |
the value, if present, otherwise other |
orElseGet
public T orElseGet (Supplier<? extends T> supplier)
If a value is present, returns the value, otherwise returns the result produced by the supplying function.
Parameters | |
---|---|
supplier |
Supplier : the supplying function that produces a value to be returned |
Returns | |
---|---|
T |
the value, if present, otherwise the result produced by the supplying function |
Throws | |
---|---|
NullPointerException |
if no value is present and the supplying
function is null |
orElseThrow
public T orElseThrow (Supplier<? extends X> exceptionSupplier)
If a value is present, returns the value, otherwise throws an exception produced by the exception supplying function.
API Note:
- A method reference to the exception constructor with an empty argument
list can be used as the supplier. For example,
IllegalStateException::new
Parameters | |
---|---|
exceptionSupplier |
Supplier : the supplying function that produces an
exception to be thrown |
Returns | |
---|---|
T |
the value, if present |
Throws | |
---|---|
|
if no value is present |
NullPointerException |
if no value is present and the exception
supplying function is null |
Throwable |
orElseThrow
public T orElseThrow ()
If a value is present, returns the value, otherwise throws
NoSuchElementException
.
Returns | |
---|---|
T |
the non-null value described by this Optional |
Throws | |
---|---|
NoSuchElementException |
if no value is present |
stream
public Stream<T> stream ()
If a value is present, returns a sequential Stream
containing
only that value, otherwise returns an empty Stream
.
API Note:
- This method can be used to transform a
Stream
of optional elements to aStream
of present value elements:Stream<Optional<T>> os = .. Stream<T> s = os.flatMap(Optional::stream)
Returns | |
---|---|
Stream<T> |
the optional value as a Stream |
toString
public String toString ()
Returns a non-empty string representation of this Optional
suitable for debugging. The exact presentation format is unspecified and
may vary between implementations and versions.
Implementation Requirements:
- If a value is present the result must include its string representation
in the result. Empty and present
Optional
s must be unambiguously differentiable.
Returns | |
---|---|
String |
the string representation of this instance |