Conversión opcional de guava a Java
optional (4)
¿Cómo hacer la conversión de Guava Opcional a Java Opcional, sin utilizar ninguna sentencia if?
if (maybeSomething.isPresent()) {
return java.util.Optional.of(maybeSomething.get())
} else {
return java.util.Optional.empty()
}
¿Qué hay de Optional javaOpt = Optional.ofNullable(guavaOpt.orNull());
?
Depende completamente de los usos que haga actualmente de sus Opcionales de Guava; y el primer problema radica en las diferencias entre ambos.
Entre otros:
- Guava''s Optional es abstracto, Java 8''s es final;
- Existen métodos en Guava que no en Java 8, y viceversa.
Lo que significa que lo primero que debe determinar es sus diferentes usos de Guava; esto condicionará la forma en que tendrás que construir un Java 8 equivalente.
Pero dada la diferencia en la API para ambos, algunos de ellos parecen inevitables ...
Mi sugerencia personal aquí sería simplemente ir hasta el final y reemplazar todos los usos actuales de Guava''s con Java 8''s; y si se necesita un "período de eliminación gradual", desapruebe los métodos necesarios y proporciónelos durante el tiempo que sea necesario, hasta que Guava''s Optional se descarte por completo.
Utilizar la transformación de guayaba.
maybeSomething
.transform(java.util.Optional::of).or(java.util.Optional.empty());
Guava Release 21 introdujo los métodos de conversión toJavaUtil
y fromJavaUtil
a la clase Optional
.
Bajo el capó, parece implementarse en gran parte como sugerencia en la respuesta de 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));
}