如何编写安全的java.util.可选的空指针赋值,当获取aList.get(0)



我有以下代码,当我对.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);

最新更新