Java 8嵌套的空检查和访问第一个元素

Java 8嵌套的空检查和访问第一个元素,java,Java,如何将以下遗留java代码转换为使用可选代码: if (outer != null && outer.getInnerMethod() != null && outer.getInnerMethod().isAllowed()) { Obj value = outer.getInnerMethod().getSomethingElse(); } 用一些像可选的。ofNullable的东西把我带到这里- Optional.of

如何将以下遗留java代码转换为使用可选代码:

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()
,这将生成一个
可选的
。您想改用
过滤器