在 Scala 中将 Option[Double] 转换为 Double 的错误

Casting error from Option[Double] to Double in scala

我在从 Option[Double] 转换为 Double 时遇到问题。我收到以下异常错误:

scala.Some cannot be cast to java.lang.Double

val ty = ttnew.distinct().leftOuterJoin(rank).map{ case ((key),(c,d)) => (key,c._1,c._2,c._3,d.getOrElse(Double).asInstanceOf[Double]) }

请帮忙!

d.getOrElse(Double).asInstanceOf[Double]

没有意义。

假设 d 是一个 Option[Double] 如果你想要一个 Double 你不能施放它,你需要得到 "out of" 的值 Option.

getOrElse 允许您获取存在的值,如果不存在则提供回退值(即 None)。

例如:

d.getOrElse(0) // 0, or anything that makes sense as a fallback

如果 d 的类型为 Option[Double],则 d.getOrElse(0) 的类型为 Double

那不是你对待 Option 的方式。使用 .getOrElse.map

val ty=ttnew.distinct().leftOuterJoin(rank).map{ case ((key),(c,d)) => (key,c._1,c._2,c._3,d.getOrElse(Double).asInstanceOf[Double]) }

可能(在这种情况下)你会想要做 d.getOrElse(<a-good-default-value-like-zero-maybe>)

其他情况下你可能想要传播 Option 的含义(值可能不存在),在这些情况下你应该使用 .map:

val res: Option[String] = optionalDouble.map(doubleValue => callSomeFunctionThatConvertsDoubleToString(value))

您甚至可以使用模式匹配和提取器做其他事情。例如,使用 .collect(它是 .map,但可能有未涵盖的情况):

val ty=ttnew.distinct().leftOuterJoin(rank).collect{ case ((key),(c,Some(d))) => (key,c._1,c._2,c._3,d) }