【发布时间】:2016-08-04 17:47:46
【问题描述】:
我有一个这样的类结构:
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;
}
}
我想做的是这样的:
main() {
//initialize a Foo object called foo
String a = foo.getFooB().ifPresent(FooB::getA);
}
基本上,如果 foo 对象返回 FooB 存在,则从 FooB 获取字段 String a 并将其存储在局部变量 String a 中。我怎样才能在 1 行中优雅地做到这一点?
【问题讨论】:
-
问题是:如果
Optional<FooB>为空,你想发生什么?这正是 Optional 的用途:迫使您考虑这种情况。 -
ifPresent()需要一个不能返回任何东西的消费者。虽然你可以给它一个有状态的消费者,但最好阅读使用map()。你只需要再次处理生成的Optional<String>:String a = foo.getFooB().map(FooB::getA).orElse(null);