How can I map Optional to another Optional if not present? [duplicate]

  • A+

This question already has an answer here:

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)); 


Since Java 9, there is Optional.or. It accepts a supplier for another Optional.

return cache.getUser(id).or(() -> repository.getUser(id)); 


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: