Что ж, вы определенно можете избежать «вложенности» с помощью Stream API:
if(object1List.stream()
.anyMatch(a -> a.getObj1Name() == null ||
a.getObj1Desc() == null)){
// throw error
}else if(object1List.stream()
.anyMatch(a -> a.getObject2List().stream()
.anyMatch(b -> b.getObj2Name() == null ||
b.getObj2Desc() == null))){
// throw error
}else if(object1List.stream()
.anyMatch(a -> a.getObject2List().stream()
.anyMatch(b -> b.getObject3List().stream()
.anyMatch(c -> c.getObj3Name() == null ||
c.getObj3Desc() == null)))){
// throw error
}
Другой подход, более компактный, но, вероятно, менее эффективный:
boolean result = object1List.stream()
.flatMap(a -> a.getObject2List().stream()
.flatMap(b -> b.getObject3List().stream()
.flatMap(c -> Stream.of(a.getObj1Name(),
a.getObj1Desc(), b.getObj2Name(),
b.getObj2Desc(), c.getObj3Name(), c.getObj3Desc()))))
.anyMatch(Objects::isNull);
if(result){ // throw error }
Итак,Чтобы сделать вывод о том, является ли проблема производительностью, перейдите к вашему подходу или попробуйте и посмотрите, может ли API параллельного потока принести вам пользу, в противном случае этого достаточно.