Simplify ifPresentOrElse chain

DerBenniAusA :

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()).

Eran :

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.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=125272&siteId=1