可选的获得领域

Ric*_*ard 6 java optional consumer java-8

我有这样的类结构:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的目标是调用get方法fooB,然后检查它是否存在.如果它存在则返回valA属性,如果不存在则返回null.所以像这样:

Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null);
Run Code Online (Sandbox Code Playgroud)

当然这不是正确的Java 8可选语法,但那是我的"伪代码".有没有办法在Java 8中用1行实现这一点?

Lii*_*Lii 18

你所描述的是map方法:

Integer valA = foo.getFoob().map(f -> f.getValA()).orElse(null);
Run Code Online (Sandbox Code Playgroud)

mapOptional如果值存在,则允许您使用函数转换a中的值,并且仅在不存在的值中更改可选的类型.

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

  • 成熟的候选人使用方法参考; `.MAP(FooB :: getValA)`. (8认同)