将 Scala Option 转换为 Java Optional

2022-09-02 02:47:35

我需要将Scala Option转换为Java Optional。我设法写了这个:

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

但我不喜欢它。

有没有一个简单的方法来做到这一点,或者一个内置的scala转换器?我正在寻找类似的东西:

Options.asJava(option);

答案 1

在Java中,我能想到的最短方法是:

Optional.ofNullable(option.getOrElse(null))

@RégisJean-Gilles实际上建议,如果你在Scala中编写转换,那就更短了:

Optional.ofNullable(option.orNull)

顺便说一句,你必须知道Scala在Scala 2.12之前不支持Java 8,而Scala 2.12还没有正式发布。查看文档(在发布之前可能会更改),中没有这样的转换。JavaConversions


答案 2

首先,有一个专用的转换器,从scala到java的。Scala 2.13OptionOptional

来自Java显式方式):

import scala.jdk.javaapi.OptionConverters;

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

来自 Scala隐式方式):

import scala.jdk.OptionConverters._

// val option: Option[Int] = Some(42)
option.toJava
// java.util.Optional[Int] = Optional[42]

推荐