【发布时间】:2015-02-19 17:33:06
【问题描述】:
Java 8“可选”容器遇到了一个乏味的问题。我无法将 Optional 映射到“冒泡”另一个 Optional。
假设我有一个 RussianNestingDoll 类
public class NestedOptionalTest {
public static void main(String[] args) {
RussianNestingDoll doll = RussianNestingDoll.createInstance(RussianNestingDoll.createInstance(RussianNestingDoll.createInstance()));
Optional<Optional<RussianNestingDoll>> thirdDollContents = doll.getInnerDoll().map(d -> d.getInnerDoll());
if (thirdDollContents.isPresent() && thirdDollContents.get().isPresent()) {
System.out.println(thirdDollContents.get().get());
}
else {
System.out.println("empty");
}
}
private static final class RussianNestingDoll {
private final Optional<RussianNestingDoll> innerDoll;
public Optional<RussianNestingDoll> getInnerDoll() {
return innerDoll;
}
private RussianNestingDoll(Optional<RussianNestingDoll> innerDoll) {
this.innerDoll = innerDoll;
}
public static RussianNestingDoll createInstance() {
return new RussianNestingDoll(Optional.empty());
}
public static RussianNestingDoll createInstance(RussianNestingDoll innerDoll) {
return new RussianNestingDoll(Optional.of(innerDoll));
}
}
}
最好不必使用嵌套的可选项,而只需使用可选的“冒泡”。这样我就可以只调用一次“isPresent()”和“get()”,而不是同时调用它们两次。有没有办法我可以做到这一点?
【问题讨论】:
标签: java lambda java-8 guava optional