如何从java.util.Optional方法调用链接到Guava可选?

时间:2015-03-15 08:42:40

标签: java java-8 guava optional

我有以下使用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();

非常感谢任何帮助!

1 个答案:

答案 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();
        }
    })

等等