Richard Richard - 5 months ago 24
Java Question

Optional Getting Field

I have a class structure like this:

public class Foo {
private FooB foob;

public Optional<FooB> getFoob() {
return Optional.ofNullable(foob);
}
}

public class FooB {
private int valA;

public int getValA() {
return valA;
}
}


My objective is to call the get method for
fooB
and then check to see if it's present. If it is present then return the
valA
property, if it doesn't then just return null. So something like this:

Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null);


Of course this isn't proper Java 8 optional syntax but that's my "psuedo code". Is there any way to achieve this in Java 8 with 1 line?

Lii Lii
Answer

What you are describing is the map method:

Integer valA = foo.getFoob().map(f -> f.getValA()).orElse(null);

map lets you transform the value inside an Optional with a function if it is present, and only changes the type if the value in not present.

Note that you can return null from the mapping function, in which case the result will be Optional.empty().