我有以下使用java.util.optional
// this works fine for java.util.Optional
Optional <Context> xx = Optional.ofNullable(x);
Optional<DateRange> dates = xx.map(Context::getEntity).map(Entitiy::getDates);
但是,我需要将其转换为使用番石榴的可选项。我试过像guava可选的转换,但是我不确定如何用guava可选链接这样的东西?
// guava...how can I chain method calls as such...this fails of course
Optional <Context> xx = Optional.of(x);
Optional<DateRange> dates = xx.get().getEntity().getDates();
非常感谢任何帮助!
答案 0 :(得分:1)
几乎完全一样。方法的名称不同,但用法完全相同。
请记住,Guava的 Optional.of()和Java8的 Optional.ofNullable()是不一样的。你应该使用Guava的 Optional.fromNullable()。
Guava的 Optional.transform()等于Java8的 Optional.map()。
Optional<Context> xx = Optional.fromNullable(x);
Optional<DateRange> dates = xx.transform(Context::getEntity).transform(Entitiy::getDates);
如果您不使用Java8,则无法使用lambdas和方法引用,因此您将不得不继续使用实现 Function 接口的匿名类:
xx.transform(new Function<Context, Entity>() {
@Override
public Entity apply(Context c) {
return c.getEntity();
}
})
等等