如何在获取 aList.get(0) 时编写安全的 java.util.Optional 空指针赋值?

How can I write safe java.util.Optional null pointer assignment when getting 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 防止 .getList().get(0) 抛出的可选代码(使用 .map 等)?

这是你想要做的吗?

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 中使用 streams 是否很清楚,但你会这样做:

Optional<String> desc = Optional.ofNullable(objParam)
        .map(MyObject::getMyParentObject)
        .map(MyObject::getListOfMyObjects)
        .map(List::stream)
        .flatMap(Stream::findFirst)
        .map(MyObject::getDesc);