简化ifPresentOrElse链

Der*_*usA 4 java optional chain

给定代码:

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

现在,我正在考虑如何简化链并删除重复的代码行(() -> doErrHandling())。

Era*_*ran 6

用途map

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

map将返回Optional.empty()如果原来Optional是空的,将包裹的结果someMap.get(s)Optional其他。