getOrElse默认为不同的类型

时间:2017-06-27 16:33:27

标签: excel scala apache-poi

有一个问题,我只想从此JsValue返回一个空字符串,而不是在没有找到值的情况下返回0。基本上我想要的是:

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)

但是这给我带来了将cellValue更改为String类型的问题。也尝试了这个

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

但这给了我一个问题,即我正在使用替代方法重载方法.setCellValue。我已经习惯了这个工作,因为我来自Java背景,不知道为什么会失败。

我仍然掌握Scala的情况,所以如果有一个简单的解决方案,请耐心等待。

1 个答案:

答案 0 :(得分:3)

一个想法是在调用map之前使用Option[Float]Option[String]转换为getOrElse

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

以上内容会返回String

cell.setValue(cellValue)