Java 8 可选择在分层对象中进行 null 检查

标签 java object java-8 java-stream option-type

在对象克隆不同类型的对象时使用可选的空检查。

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)));

如何一起检查列表中的 null 和值。

最佳答案

无需使用 Streams。这是带有 null 和空检查的代码:

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 可选择在分层对象中进行 null 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46397666/

相关文章:

java - 我们如何管理 SMS,哪种语言是最好的处理方式?

java - spring Controller - 返回 map 而不是创建单独的对象

java - 如何在Java中同时计算近似值?

java - 将方法应用于流

java - Vaadin Spring Boot 应用程序中的 Node.js 错误

Java KeyStroke.getKeyStroke 修饰符已更改

c# - 将根 XML 元素反序列化为数组

java - 如何访问列表中的对象方法?

java - 在我的 ArrayList 的 ArrayList 中,为什么对单个元素的所有操作都会影响所有其他索引?

android-studio - 如何将 Java 方法引用代码转换为 Kotlin