在对象克隆不同类型的对象时使用可选的空检查。
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/