如何从Guava可选转换为Java可选,不使用任何if语句?
if (maybeSomething.isPresent()) {
return java.util.Optional.of(maybeSomething.get())
} else {
return java.util.Optional.empty()
}
答案 0 :(得分:29)
使用番石榴变换
maybeSomething
.transform(java.util.Optional::of).or(java.util.Optional.empty());
答案 1 :(得分:20)
Guava Release 21将toJavaUtil
和fromJavaUtil
转换方法引入了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)
这完全取决于您目前对番石榴的选项的使用情况;第一个问题在于两者之间的差异。
其中:
这意味着您需要确定的第一件事是您对番石榴的不同用法;这将决定你必须构建一个等效的Java 8的方式。
但考虑到两者的API不同,沿途的一些if
似乎是不可避免的......
我个人的建议就是一路走来,用Java 8代替Guava的所有当前用途;如果需要“淘汰期”,则弃用必要的方法并在需要时提供,直到完全排除Guava的Optional。