Java 8嵌套的空检查和访问第一个元素
如何将以下遗留java代码转换为使用可选代码:Java 8嵌套的空检查和访问第一个元素,java,Java,如何将以下遗留java代码转换为使用可选代码: if (outer != null && outer.getInnerMethod() != null && outer.getInnerMethod().isAllowed()) { Obj value = outer.getInnerMethod().getSomethingElse(); } 用一些像可选的。ofNullable的东西把我带到这里- Optional.of
if (outer != null
&& outer.getInnerMethod() != null
&& outer.getInnerMethod().isAllowed()) {
Obj value = outer.getInnerMethod().getSomethingElse();
}
用一些像可选的。ofNullable的东西把我带到这里-
Optional.ofNullable(Outer.getOuter)
.map(Outer::getInnerMethod)
.map(SomethingElse::isAllowed)
.ifPresent(.. );
但是ifPresent将无法访问外部对象。转换这样的东西最干净的方法是什么?这样做
Optional.ofNullable(Outer.getOuter)
.filter(outer -> ::Objects.nonNull(outer.getInnerMethod()))
.filter(SomethingElse::isAllowed)
.map (.. ); //or whatever operation you want to do here
这样做
Optional.ofNullable(Outer.getOuter)
.filter(outer -> ::Objects.nonNull(outer.getInnerMethod()))
.filter(SomethingElse::isAllowed)
.map (.. ); //or whatever operation you want to do here
使用
filter
而不是map
。从
如果存在一个值,并且该值与给定谓词匹配,则返回一个描述该值的可选值,否则返回一个空的可选值
Optional=Optional.ofNullable(Outer.getOuter)
.map(外部::getInnerMethod)
.filter(SomethingElse::不允许)
.map(SomethingElse::getSomethingElse);
使用过滤器
而不是映射
。从
如果存在一个值,并且该值与给定谓词匹配,则返回一个描述该值的可选值,否则返回一个空的可选值
Optional=Optional.ofNullable(Outer.getOuter)
.map(外部::getInnerMethod)
.filter(SomethingElse::不允许)
.map(SomethingElse::getSomethingElse);
如果允许使用,则不使用map进行检查使用过滤器(e->e.isAllowed())
这将过滤掉任何不允许的内容。如果允许使用过滤器(e->e.isAllowed()),则不使用map进行检查
这将过滤掉任何不允许的内容。这是一种6行单元测试候选者,以查看将发生什么。您正在映射到isAllowed()
,这将生成一个可选的。您想改用过滤器
。这是一种6行单元测试候选者,以查看将发生什么。您正在映射到isAllowed()
,这将生成一个可选的
。您想改用过滤器。