可选的获得领域

时间:2016-06-22 13:24:45

标签: java java-8 optional consumer

我有这样的类结构:

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行实现这个目的?

2 个答案:

答案 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();
   }
}