如何使用Java可选运算符来映射多个子类型

时间:2017-06-23 06:52:50

标签: java java-8 optional

我想使用java Optional运算符来避免像以下那样的空检:

if(outher != null && outher.getNested() != null &&
          outher.getNested().getInner() != null && outher.getNested().getAnotherInner() != null)

我查了一些互联网+ Java备忘单的教程,但没有找到如何解决:outher.getNested.getInner() != null && outher.getNested.getAnotherInner != null部分。

那么如何正确地做到这一点:

Optional.of(outher)
.map(Outher::getNested)
.map(Nested::getInner)
.map(Nested::getAnotherInner)
.isPresent();

会很棒

2 个答案:

答案 0 :(得分:3)

问题是<div id="items_#:idItem#" data-role="sortable" data-cursor="move" data-axis="x" data-hint="???"> </div> 返回Inner的实例,但它应该返回Outer。

我的建议是:

.map(Nested::getInner)

不确定flatMap,因为你应该在一个实体上映射

答案 1 :(得分:1)

嗯,如果你真的想要,有一种方法可以使用flatmap

 boolean result = Optional.ofNullable(outer)
            .map(Outer::getNested)
            .filter(x-> x.getInner() != null)
            .map(Nested::getAnotherInner)
            .isPresent();