I have a use case, where I have nested classes and an object of the top class. I want to get a value which is at the Nth level. I\'m using getters repetitively to achieve th
Use Optional
with a series of map()
calls for a nice one-liner:
String getAValue(D d) {
return Optional.ofNullable(d)
.map(D::getC).map(C::getB).map(B::getA).map(A::getA1).orElse(null);
}
If anything is null
along the chain, including d
itself, the orElse()
will execute.
Wrap each nested class in an Optional:
Class A {
String a1;
}
Class B {
Optional<A> a;
}
Class C {
Optional<B> b;
}
Class D {
Optional<C> c;
}
Then use flatMap and map to operate on these optional values:
String a1 = d.flatMap(D::getC) // flatMap operates on Optional
.flatMap(C::getB) // flatMap also returns an Optional
.flatMap(B::getA) // that's why you can keep calling .flatMap()
.map(A::getA1) // unwrap the value of a1, if any
.orElse("Something went wrong.") // in case anything fails
You might want to check out the concept of Monads. And if you're feeling adventurous, Scala is too distant from Java.