Java 8可选获取(如果存在)

Ric*_*ard 3 java optional java-8

我有这样的类结构:

public class Foo {
    private FooB fooB;

    public Optional<FooB> getFooB() {
        return Optional.ofNullable(fooB);
    }
}

public class FooB {
    private String a;
    private String b;

    public String getA() {
        return a;
    }

    public String getB() {
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的:

main() {
    //initialize a Foo object called foo
    String a = foo.getFooB().ifPresent(FooB::getA);
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果foo的对象返回FooB如存在,则获取字段String aFooB并将其存储在局部变量String a.如何在一行中优雅地完成这项工作?

Nic*_*tto 8

getFooB()返回一个实例Optional<FooB>,为了得到相应的值getA(),你需要使用下面的map方法:

Optional<String> a = foo.getFooB().map(FooB::getA);
Run Code Online (Sandbox Code Playgroud)