当调用.getList().get(0)为null时,将引发以下代码。
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)抛出?
发布于 2015-03-09 20:36:33
这就是你想做的吗?
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);https://stackoverflow.com/questions/28950305
复制相似问题