【发布时间】:2019-09-17 10:23:58
【问题描述】:
我有以下嵌套的空检查。试图通过Optional 使其可读,但如何映射第一个元素?
卡在下面,不确定如何映射这条线
vo.getSomething().getAnother().get(0)
我卡在第三行
Optional.of(vo.getSomething)
.map(Something::getAnother)
.map(List<Another>::get(0)) // will not work
这是一个有效的空检查。我正在尝试使用 Optional 进行清理。
if(vo.getSomething() != null){
if(vo.getSomething().getAnother() != null){
if(vo.getSomething().getAnother().get(0) != null){
if(vo.getSomething().getAnother().get(0).getInner() != null){
if(vo.getSomething().getAnother().get(0).getInner() != null){
if(vo.getSomething().getAnother().get(0).getInner().get(0) != null){
return vo.getSomething().getAnother().get(0).getInner().get(0).getProductName();
}
}
}
}
}
}
【问题讨论】:
-
@OleksandrPyrohov 接受的答案正是 OP 正在做什么,所以我认为他们知道这种方法。问题是关于如何使
List<Another>::get(0)工作 -
这种糟糕的设计不应该由
Optional来解决,而应该通过重构所有的嵌套来解决。 -
@Kayaman 我们如何重构它......这是从外部 api 在该结构中捕获的 json 响应......
-
@karvai 几种方式。您不认为只为了获得一个产品名称而进行 6 次空检查不是最佳选择吗?