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

How to port from java.util.Optional method call chaining to 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 Optional transform 这样的东西,但我不确定如何用 guava optional 链接这样的东西?

// 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();

非常感谢任何帮助!

几乎完全一样。只是方法名称不同,用法是完全一样的。

请记住 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,您将无法使用 lambda 和方法引用,因此您将不得不继续使用匿名 类 实现 函数接口:

xx.transform(new Function<Context, Entity>() {
        @Override
        public Entity apply(Context c) {
            return c.getEntity();
        }
    })

等等