我有以下代码,当我对.getList().get(0)的调用为空时,它会抛出。
Optional<MyObject> _obj = java.util.Optional.ofNullable(objParam);
// where getListOfMyObjects() returns List<MyObjects>
Optional<String> desc = Optional.ofNullable(_obj.get().getMyParentObject().getListOfMyObjects().get(0).getDesc());
如何编写安全的 java 8 可选代码(使用 .map 等)来防止 .getList().get(0) 抛出?
这是你想做的吗?
Optional<String> desc = Optional.ofNullable(objParam)
.map(MyObject::getMyParentObject)
.map(MyObject::getListOfMyObjects)
.filter(lst -> ! lst.isEmpty())
.map(lst -> lst.get(0))
.map(MyObject::getDesc);
另一种方法是获取列表的stream
,然后使用 findFirst
. 我不确定在可选中使用流是否非常清楚,但这是您将如何做到的:
Optional<String> desc = Optional.ofNullable(objParam)
.map(MyObject::getMyParentObject)
.map(MyObject::getListOfMyObjects)
.map(List::stream)
.flatMap(Stream::findFirst)
.map(MyObject::getDesc);