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
。