Java 8可选在分层对象中执行空检查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8可选在分层对象中执行空检查相关的知识,希望对你有一定的参考价值。

在对象克隆不同类型的对象时使用Optional to Null Check。

class A{ C cObj, List<B> bList;}

class B{ C cObj; List<C> cList;}

class C { String label; String value;}

class D{ String name; String age; String addressCode;}

映射A - > D.

d.setAddessCode(A.getBlist().get(0).getcList().get(0).getValue());

如何使用java 8可选来检查null

A.getBlist().get(0).getcList().get(0).getValue()

我试过了

d.setAddessCode(Optional.ofNullable(A).map(A::getBList).map(Stream::of).orElseGet(Stream::empty).findFirst().map(B::getCList).map(Stream::of).orElseGet(Stream::empty).findFirst().map(C::getValue).orElse(null)));

如何在List和值中一起检查null。

答案

没有必要使用Streams。这是包含null和empty检查的代码:

d.setAddressCode(Optional.ofNullable(a)
                         .map(A::getbList)
                         .filter(bList -> ! bList.isEmpty())
                         .map(bList -> bList.get(0))
                         .map(B::getcList)
                         .filter(cList -> ! cList.isEmpty())
                         .map(cList -> cList.get(0))
                         .map(C::getValue)
                         .orElse(null));

这可以通过一个小帮助方法简化:

public class MyUtils {
    public static <E> E getFirst(List<E> list) {
        return (list == null || list.isEmpty() ? null : list.get(0));
    }
}
d.setAddressCode(Optional.ofNullable(a)
                         .map(A::getbList)
                         .map(MyUtils::getFirst)
                         .map(B::getcList)
                         .map(MyUtils::getFirst)
                         .map(C::getValue)
                         .orElse(null));

以上是关于Java 8可选在分层对象中执行空检查的主要内容,如果未能解决你的问题,请参考以下文章

js中filter过滤用法总结

在 Azure YAML 中检查空对象类型参数

Java 8 用 Optional 替换两个空检查

C#:如何对动态对象执行空检查

从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象

Mongoose 可选嵌套属性 - 检查空/未定义?