可选地获取字段

Optionally getting field

我有这样的 class 结构:

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;
    }
}

我的objective是调用fooB的get方法,然后检查它是否存在。如果存在,则 return valA 属性,如果不存在,则 return 为空。所以像这样:

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

当然这不是正确的 Java 8 可选语法,但这是我的 "psuedo code"。有什么方法可以在 Java 8 中用 1 行实现这个吗?

你描述的是方法 Optional.map:

Integer valA = foo.getFoob().map(foo -> foo.getValA()).orElse(null);
如果值存在,

map 允许您使用函数转换 Optional 中的值,如果值不存在,return 是一个空的可选值。

另请注意,您可以从映射函数中 return null,在这种情况下,结果将为 Optional.empty()

为什么不在 class Foo 中添加 getValue 方法?这将是一种授权。

public class Foo {
   ...
   public Integer getValue() {
       if (foob == null) {
          return null;
       }
       return foob.getValA();
   }
}