2016-11-16 45 views
0

我在從Option [Double]轉換爲Double時遇到問題。我收到以下異常錯誤:從選項[Double]到Cast中的錯誤scala中的雙精度

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

請幫忙!

回答

6
d.getOrElse(Double).asInstanceOf[Double] 

是沒有意義的。

假設dOption[Double],如果你想有一個Double你可以不投,你需要獲得價值「出」的Option

getOrElse允許您獲取該值(如果存在),並在缺失情況下提供回退值(即None)。

例如:

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

如果d已鍵入Option[Double]然後d.getOrElse(0)具有類型Double

+0

所以,我想將它從d.getOrElse改變(雙人間).asInstanceOf [雙]到d.getOrElse( 0) – Rushabh

+0

是的,其中'0'可以替換爲你的域中任何合理的默認值。 –

+0

非常感謝。我會盡力回覆你如果錯誤持續存在。 – Rushabh

5

這不是你如何處理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) } 
+0

但是,在這種情況下如何使用map。這可能是個愚蠢的問題,但是,我對scala完全陌生 – Rushabh

+0

增加了一些替代方案@rrr – pedrorijo91

+0

通過使用這個收集案例,它將涵蓋所有來自d的案例嗎? – Rushabh