This question already has an answer here:
- Optional orElse Optional in Java 6 answers
I have this Java 8 code:
public Optional<User> getUser(String id) {
Optional<User> userFromCache = cache.getUser(id);
if (userFromCache.isPresent()) {
return userFromCache;
}
return repository.getUser(id);
}
It works fine but I'm wondering how can I chain the call to not to use if
. I have tried with orElseGet
but it doesn't allow to return another Optional<User>
but a User
.
I want something like this:
Optional<User> userFromCache = cache.getUser(id)
.orElseGet(() -> repository.getUser(id));
You can create an optional based on a nullable value from other optionals:
But your current solution is clearly more readable.
You can still use ?:
It's obviously an if in disguise but so is any other solution.
Since Java 9, there is
Optional.or
. It accepts a supplier for anotherOptional
.