我有这样的类结构:
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;
}
}
我的目标是调用fooB
的get方法,然后检查它是否存在。如果它存在则返回valA
属性,如果不存在则返回null。所以像这样:
Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null);
当然这不是正确的Java 8可选语法,但那是我的“伪代码”。有没有办法在Java 8中用1行实现这个目的?
答案 0 :(得分:17)
您所描述的是map
方法:
Integer valA = foo.getFoob().map(f -> f.getValA()).orElse(null);
map
允许您使用函数转换Optional
内的值(如果值存在),并且仅在不存在的值中更改可选的类型。
另请注意,您可以从映射函数返回null,在这种情况下,结果将为Optional.empty()
。
答案 1 :(得分:1)
为什么不向课程getValue
添加Foo
方法?这将是一种代表团。
public class Foo {
...
public Integer getValue() {
if (foob == null) {
return null;
}
return foob.getValA();
}
}