Convert Scala Java Option More

I need to convert Scala Option to Java Optional. I managed to write the following:

public <T> Optional<T> convertOption2Optional(Option<T> option) { return option.isDefined() ? Optional.of(option.get()) : Optional.empty(); } 

But I do not like it.

Is there an easy way to do this or the built-in Scala converter? I am looking for something like:

 Options.asJava(option); 
+8
source share
7 answers

The shortest way I can think of in Java is:

 Optional.ofNullable(option.getOrElse(null)) 

@ RΓ©gisJean-Gilles actually suggested even shorter if you are writing a conversion in Scala:

 Optional.ofNullable(option.orNull) 

By the way, you should know that Scala does not support Java 8 until Scala 2.12, which has not yet been officially announced. Looking at the docs (which may change before release), there is no such conversion in JavaConversions .

+9
source

You can also use some of the common utilities on github, for example:

https://gist.github.com/julienroubieu/fbb7e1467ab44203a09f

https://github.com/scala/scala-java8-compat

+3
source

I'm doing it:

 import java.util.{Optional => JOption} package object myscala { implicit final class RichJOption[T](val optional: JOption[T]) { def asScala: Option[T] = optional match { case null => null case _ => if (optional.isPresent) Option(optional.get()) else None } } implicit final class RichOption[T](val option: Option[T]) { def asJava: JOption[T] = option match { case null => null case _ => if (option.isDefined) JOption.of(option.get) else JOption.empty() } } } 

so you can use it as follows :)

 import myscala._ object Main extends App { val scalaOption = java.util.Optional.ofNullable("test").asScala println(scalaOption) val javaOption = Option("test").asJava println(javaOption) } 
+2
source

Starting Scala 2.13 , there is a special converter from the Option ladder to Java Optional .

With Java (explicitly):

 import scala.jdk.javaapi.OptionConverters; // val option: Option[Int] = Some(42) OptionConverters.toJava(option); // java.util.Optional[Int] = Optional[42] 

From Scala (implicit path):

 import scala.jdk.OptionConverters._ // val option: Option[Int] = Some(42) option.toJava // java.util.Optional[Int] = Optional[42] 
+2
source

For a given input parameter opt: Option[T] some class, you can define a method inside this class as follows:

def toOptional(implicit ev: Null <:< T): Optional[T] = Optional.ofNullable(opt.orNull) .

+1
source

asJava solution asJava ! Available from 2.10 .

Example:

 import scala.compat.java8.OptionConverters._ class Test { val o = Option(2.7) val oj = o.asJava // Optional[Double] val ojd = o.asPrimitive // OptionalDouble val ojds = ojd.asScala // Option(2.7) again } 

More details here .

+1
source

Another good library:

https://github.com/AVSystem/scala-commons

 import com.avsystem.commons.jiop.JavaInterop._ Optional.of("anything").asScala 
-1
source

All Articles