Package org.silverpeas.core.util
Class Mutable<T>
- java.lang.Object
-
- org.silverpeas.core.util.Mutable<T>
-
public final class Mutable<T> extends Object
A mutable value wrapper which may or may not contain a non-null value. If a value is present,
isPresent()
will returntrue
andget()
will return the value.Additional methods that depend on the presence or absence of a contained value are provided, such as
orElse()
(return a default value if value not present) andifPresent()
(execute a block of code if the value is present).- Author:
- Yohann Chastagnier
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <T> Mutable<T>
empty()
Returns an emptyMutable
.boolean
equals(Object obj)
Indicates whether some other object is "equal to" this Mutable.Mutable<T>
filter(Predicate<? super T> predicate)
If a value is present, and the value matches the given predicate, return anMutable
describing the value, otherwise return an emptyMutable
.<U> Mutable<U>
flatMap(Function<? super T,Mutable<U>> mapper)
If a value is present, apply the providedMutable
-bearing mapping function to it, return that result, otherwise return an emptyMutable
.T
get()
If a value is present in thisMutable
, returns the value, otherwise throwsNoSuchElementException
.int
hashCode()
Returns the hash code value of the present value, if any, or 0 (zero) if no value is present.void
ifPresent(Consumer<? super T> consumer)
If a value is present, invoke the specified consumer with the value, otherwise do nothing.boolean
is(T value)
Indicates id the given value is equal to the one of theMutable
instance.boolean
isEmpty()
Returntrue
if no value is present, otherwisefalse
.boolean
isPresent()
Returntrue
if there is a value present, otherwisefalse
.<U> Mutable<U>
map(Function<? super T,? extends U> mapper)
If a value is present, apply the provided mapping function to it, and if the result is non-null, return anMutable
describing the result.static <T> Mutable<T>
of(T value)
Returns anMutable
with the specified value.static <T> Mutable<T>
ofNullable(T value)
Returns anMutable
with the specified value which can be null.T
orElse(T other)
Return the value if present, otherwise returnother
.T
orElseGet(Supplier<? extends T> other)
Return the value if present, otherwise invokeother
and return the result of that invocation.<X extends Throwable>
TorElseThrow(Supplier<? extends X> exceptionSupplier)
Return the contained value, if present, otherwise throw an exception to be created by the provided supplier.void
set(T value)
Sets the value of theMutable
instance.String
toString()
Returns a non-empty string representation of this Mutable suitable for debugging.
-
-
-
Method Detail
-
of
public static <T> Mutable<T> of(T value)
Returns anMutable
with the specified value.- Type Parameters:
T
- the class of the value- Parameters:
value
- the value to be present, which must be non-null- Returns:
- an
Mutable
with the value present - Throws:
NullPointerException
- if value is null
-
ofNullable
public static <T> Mutable<T> ofNullable(T value)
Returns anMutable
with the specified value which can be null.- Type Parameters:
T
- the class of the value- Parameters:
value
- the value to be present, which must be null- Returns:
- an
Mutable
with the value present
-
empty
public static <T> Mutable<T> empty()
Returns an emptyMutable
. Its value is by default null.- Type Parameters:
T
- class of the value.- Returns:
- a
Mutable
with a null value.
-
get
public T get()
If a value is present in thisMutable
, returns the value, otherwise throwsNoSuchElementException
.- Returns:
- the non-null value held by this
Mutable
- Throws:
NoSuchElementException
- if there is no value present- See Also:
isPresent()
-
set
public void set(T value)
Sets the value of theMutable
instance.- Parameters:
value
- the value to set.
-
is
public boolean is(T value)
Indicates id the given value is equal to the one of theMutable
instance.- Parameters:
value
- the value to verify.- Returns:
- true if the value is equal to the wrapped one in this mutable. False otherwise.
-
isPresent
public boolean isPresent()
Returntrue
if there is a value present, otherwisefalse
.- Returns:
true
if there is a value present, otherwisefalse
-
isEmpty
public boolean isEmpty()
Returntrue
if no value is present, otherwisefalse
.- Returns:
true
if there is no value, otherwisefalse
-
ifPresent
public void ifPresent(Consumer<? super T> consumer)
If a value is present, invoke the specified consumer with the value, otherwise do nothing.- Parameters:
consumer
- block to be executed if a value is present- Throws:
NullPointerException
- if value is present andconsumer
is null
-
filter
public Mutable<T> filter(Predicate<? super T> predicate)
If a value is present, and the value matches the given predicate, return anMutable
describing the value, otherwise return an emptyMutable
.- Parameters:
predicate
- a predicate to apply to the value, if present- Returns:
- an
Mutable
describing the value of thisMutable
if a value is present and the value matches the given predicate, otherwise an emptyMutable
- Throws:
NullPointerException
- if the predicate is null
-
map
public <U> Mutable<U> map(Function<? super T,? extends U> mapper)
If a value is present, apply the provided mapping function to it, and if the result is non-null, return anMutable
describing the result. Otherwise return an emptyMutable
.- Type Parameters:
U
- The type of the result of the mapping function- Parameters:
mapper
- a mapping function to apply to the value, if present- Returns:
- an
Mutable
describing the result of applying a mapping function to the value of thisMutable
, if a value is present, otherwise an emptyMutable
- Throws:
NullPointerException
- if the mapping function is null- API Note:
- This method supports post-processing on mutable values, without
the need to explicitly check for a return status. For example, the
following code traverses a stream of file names, selects one that has
not yet been processed, and then opens that file, returning an
Mutable<FileInputStream>
:
Mutable<FileInputStream> fis = names.stream().filter(name -> !isProcessedYet(name)) .findFirst() .map(name -> new FileInputStream(name));
Here,
findFirst
returns anMutable<String>
, and thenmap
returns anMutable<FileInputStream>
for the desired file if one exists.
-
flatMap
public <U> Mutable<U> flatMap(Function<? super T,Mutable<U>> mapper)
If a value is present, apply the providedMutable
-bearing mapping function to it, return that result, otherwise return an emptyMutable
. This method is similar tomap(Function)
, but the provided mapper is one whose result is already anMutable
, and if invoked,flatMap
does not wrap it with an additionalMutable
.- Type Parameters:
U
- The type parameter to theMutable
returned by- Parameters:
mapper
- a mapping function to apply to the value, if present the mapping function- Returns:
- the result of applying an
Mutable
-bearing mapping function to the value of thisMutable
, if a value is present, otherwise an emptyMutable
- Throws:
NullPointerException
- if the mapping function is null or returns a null result
-
orElse
public T orElse(T other)
Return the value if present, otherwise returnother
.- Parameters:
other
- the value to be returned if there is no value present, may be null- Returns:
- the value, if present, otherwise
other
-
orElseGet
public T orElseGet(Supplier<? extends T> other)
Return the value if present, otherwise invokeother
and return the result of that invocation.- Parameters:
other
- aSupplier
whose result is returned if no value is present- Returns:
- the value if present otherwise the result of
other.get()
- Throws:
NullPointerException
- if value is not present andother
is null
-
orElseThrow
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X extends Throwable
Return the contained value, if present, otherwise throw an exception to be created by the provided supplier.- Type Parameters:
X
- Type of the exception to be thrown- Parameters:
exceptionSupplier
- The supplier which will return the exception to be thrown- Returns:
- the present value
- Throws:
X
- if there is no value presentNullPointerException
- if no value is present andexceptionSupplier
is nullX extends Throwable
- API Note:
- A method reference to the exception constructor with an empty
argument list can be used as the supplier. For example,
IllegalStateException::new
-
equals
public boolean equals(Object obj)
Indicates whether some other object is "equal to" this Mutable. The other object is considered equal if:- it is also an
Mutable
and; - both instances have no value present or;
- the present values are "equal to" each other via
equals()
.
- it is also an
-
hashCode
public int hashCode()
Returns the hash code value of the present value, if any, or 0 (zero) if no value is present.
-
toString
public String toString()
Returns a non-empty string representation of this Mutable suitable for debugging. The exact presentation format is unspecified and may vary between implementations and versions.
-
-