web-dev-qa-db-fra.com

Convert Scala Option to Java Facultatif

J'ai besoin de convertir l'option Scala en Java en option. J'ai réussi à écrire ceci: 

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

Mais je n'aime pas ça.

Y at-il un moyen simple de le faire, ou un convertisseur de scala intégré? Je cherche quelque chose comme: 

Options.asJava(option);
7
mjjaniec

Le moyen le plus rapide auquel je puisse penser en Java est le suivant:

Optional.ofNullable(option.getOrElse(null))

@ RégisJean-Gilles a en fait suggéré même si vous écrivez la conversion en Scala:

Optional.ofNullable(option.orNull)

À propos, vous devez savoir que Scala ne supporte pas Java 8 jusqu'à Scala 2.12, qui n'est pas encore officiellement sorti. En regardant les docs (qui peuvent changer jusqu’à la publication), une telle conversion n’existe pas dans JavaConversions.

8
Dici

Je fais ça:

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()
        }

    }
}

alors, vous pouvez l'utiliser comme ça, :)

import myscala._

object Main extends App {

    val scalaOption = Java.util.Optional.ofNullable("test").asScala
    println(scalaOption)

    val javaOption = Option("test").asJava
    println(javaOption)

}
2
Zhuo YING

Vous pouvez également utiliser certains des nombreux utilitaires disponibles sur le github, par exemple:

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

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

2
Michal M

Pour un paramètre d'entrée donné opt: Option[T] d'une classe, , Vous pouvez définir une méthode dans cette classe comme suit:

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

1
Hari Bage