Search code examples
javaoption-typechain

Simplify ifPresentOrElse chain


Given the code:

  Optional<String> myOptional = getMyOptional();
  myOptional.ifPresentOrElse(
      s -> Optional.ofNullable(someMap.get(s))
      .ifPresentOrElse(g -> {
            doSomeStuff(); 
          },
          () -> doErrHandling()),
      () -> doErrHandling());

Now I am thinking about how to simplify the chain and remove the duplicate code line (() -> doErrHandling()).


Solution

  • Use map:

    Optional<String> myOptional = getMyOptional() ;
    myOptional.map(s -> someMap.get(s))
              .ifPresentOrElse(g -> doSomeStuff(), () -> doErrHandling());
    

    map will return an Optional.empty() if the original Optional is empty, and will wrap the result of someMap.get(s) with an Optional otherwise.