在 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) }
我在从 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) }