Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简化IfPresentorese链_Java_Optional_Chain - Fatal编程技术网

Java 简化IfPresentorese链

Java 简化IfPresentorese链,java,optional,chain,Java,Optional,Chain,鉴于代码: Optional<String> myOptional = getMyOptional(); myOptional.ifPresentOrElse( s -> Optional.ofNullable(someMap.get(s)) .ifPresentOrElse(g -> { doSomeStuff(); }, () -> doErrHandling())

鉴于代码:

  Optional<String> myOptional = getMyOptional();
  myOptional.ifPresentOrElse(
      s -> Optional.ofNullable(someMap.get(s))
      .ifPresentOrElse(g -> {
            doSomeStuff(); 
          },
          () -> doErrHandling()),
      () -> doErrHandling());
可选myOptional=getMyOptional();
myOptional.ifpresentose(
s->可选的不可用项(someMap.get)
.ifPresentOrElse(g->{
doSomeStuff();
},
()->DoerHandling()),
()->DoerHandling());
现在,我正在考虑如何简化链并删除重复的代码行(
()->doerHandling()
)。

使用
map

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

map
将返回一个
Optional.empty()
如果原始
Optional
为空,并将
someMap.get
的结果包装为
Optional
否则。

看起来很简单,除非您想在实际代码中使用
g
作为
if(myOptional.isPresent()&&someMap.containsKey)(myOptional.get()){doSomeStuff();}否则{doethandling();}
这是正确答案。如果需要,可以使用
someMap::get