Optional.ofNullable and method chaining
If you have no idea what can be null
, or want to check everything for null
, the only way is to chain calls to Optional.map
:
If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise return an empty Optional.
As such, if the mapper return null
, an empty Optional
will be returned, which allows to chain calls.
Optional.ofNullable(insight)
.map(i -> i.getValues())
.map(values -> values.get(0))
.map(v -> v.getValue())
.orElse(0);
The final call to orElse(0)
allows to return the default value 0 if any mapper returned null
.
smth like this should work
Optional.ofNullable(insight.getValues()).map(vals -> vals.get(0)).map(v -> v.getValue())
well, according to the sample code given, as #extractFirstValueFrom
do not contain neither @Nullable
nor checks for null like Guava's checkNotNull()
, let's assume that insight
is always something
. thus wrapping Optional.ofNullable(insight.getValues())
into Option
would not result with NPE
. then call chain of transformations is composed (each results with Optional
) that lead to result Optional<Integer>
that might be either Some
or None
.