2017-06-27 51 views
0

有一個問題,我只是想從這個JsValue返回一個空字符串,而不是返回0,如果沒有發現任何值。基本上我想要的東西如下:getOrElse默認爲不同的類型

var cellValue = (x \ "name" \ "date").asOpt[Float].getOrElse("") 

我主要是做這個,因爲我使用Apache POI建立一個Excel工作表,不想零爲默認值時,不會有任何數據。但要使用.setCellValue(cellValue),它不能是Any類型,這正是我給的。

我已經試過

var cellValue = (x \ "name" \ "date").asOpt[Float].getOrElse(0) 
if(cellValue == 0) { 
    cellValue = "" 
} 
cell.setCellValue(cellValue) 

但是這給了我的問題與改變cellValueString類型。也試過這個

var cellValue = (x \ "name" \ "date").asOpt[Float].getOrElse(0) 
if(cellValue == 0) { 
    cell.setCellValue("") 
} else cell.setCellValue(cellValue) 

但是這給了我,我重載方法.setCellValue替代品的問題。我習慣了這個工作,因爲我來自Java背景,不知道爲什麼會失敗。

我仍然得到Scala的吊so,所以如果有簡單的解決方案,請耐心等待。

回答

3

一個想法是調用getOrElse前使用mapOption[Float]轉變成Option[String]

val cellValue = (x \ "name" \ "date").asOpt[Float] 
            .map(_.toString) 
            .getOrElse("") 

以上回報String

cell.setValue(cellValue) 
+0

謝謝你,這就是我需要的!我也嘗試過'(x \「name」\「date」)。asOpt [Float] .getOrElse [String](「」)'但它對我來說也不適用。這雖然工作! –