从Guava到Java的可选转换

时间:2015-11-25 14:01:42

标签: java guava optional

如何从Guava可选转换为Java可选,不使用任何if语句?

if (maybeSomething.isPresent()) {
    return java.util.Optional.of(maybeSomething.get())
} else {
    return java.util.Optional.empty()
}

4 个答案:

答案 0 :(得分:29)

使用番石榴变换

maybeSomething
    .transform(java.util.Optional::of).or(java.util.Optional.empty());

答案 1 :(得分:20)

Guava Release 21toJavaUtilfromJavaUtil转换方法引入了Optional类。

在引擎盖下它似乎主要是作为Kayaman的回答中的建议实施的:

public java.util.Optional<T> toJavaUtil() {
    return java.util.Optional.ofNullable(orNull());
}

...

public static <T> Optional<T> fromJavaUtil(@Nullable java.util.Optional<T> javaUtilOptional) {
    return (javaUtilOptional == null) ? null : fromNullable(javaUtilOptional.orElse(null));
}

答案 2 :(得分:14)

Optional javaOpt = Optional.ofNullable(guavaOpt.orNull());怎么样?

答案 3 :(得分:1)

这完全取决于您目前对番石榴的选项的使用情况;第一个问题在于两者之间的差异。

其中:

  • Guava的Optional是抽象的,Java 8是最终的;
  • 方法存在于Guava上,不存在于Java 8上,反之亦然。

这意味着您需要确定的第一件事是您对番石榴的不同用法;这将决定你必须构建一个等效的Java 8的方式。

但考虑到两者的API不同,沿途的一些if似乎是不可避免的......

我个人的建议就是一路走来,用Java 8代替Guava的所有当前用途;如果需要“淘汰期”,则弃用必要的方法并在需要时提供,直到完全排除Guava的Optional。