当前位置: 首页 > 知识库问答 >
问题:

将Scala选项转换为Java可选

澹台建华
2023-03-14

我需要将Scala选项转换为Java可选。我写下了这样的话:

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

但是我不喜欢。

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

Options.asJava(option);

共有3个答案

吴经略
2023-03-14

2.10中有一个asJava

import scala.compat.java8.OptionConverters._

val o = Option(2.7)
val oj = o.asJava        // Optional[Double]
val ojd = o.asPrimitive  // OptionalDouble
val ojds = ojd.asScala   // Option(2.7) again

更多细节在这里。

田昊天
2023-03-14

Scala 2.13开始,有一个专用的转换器,从scala的Option到java的Opted。

从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]
章建木
2023-03-14

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

Optional.ofNullable(option.getOrElse(null))

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

Optional.ofNullable(option.orNull)

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

 类似资料:
  • 我有一个用Java编写的gradle项目,想把整个事情变成一个scala项目(仍然是gradle)。要做到这一点,需要采取哪些步骤? 我开始在scala中定义main方法,似乎Intellij不知道我要做什么。 到目前为止我所做的: > 在build.gradle中应用插件:“scala”--> 在build.gradle中编译'org.scala-lang:scala-library:2.10.

  • 本文向大家介绍Java将可选流转换为值流,包括了Java将可选流转换为值流的使用技巧和注意事项,需要的朋友参考一下 示例 您可能需要一个转换Stream发射Optional到一个Stream值,从现有的发射只值Optional。(即:没有null价值,不与之打交道)。Optional.empty()            

  • 问题内容: 我需要在Java中实现一个返回Scala的方法。 但是我遇到这个错误: 到目前为止,这是我的代码: 但似乎没有提供将其转换为的可能性。 问题答案: 我需要JavaConverters来解决这个问题。

  • 我想将下面方法的返回类型更改为< code>Future[Unit] 我使用的是Scala 2.12.1。是否有任何方便的方法可以将Java 8<code>CompletableFuture

  • 我要将转换为: 如果可选选项包含值,则流包含该值。 如果可选项不包含值,则流应为空。

  • 我想用可选的。由于只能连接流,我有以下问题: 如何将可选 转换为流 ? 示例: