如何在Scala中打开Try值并通过映射来添加其值

时间:2016-06-26 23:22:31

标签: scala intellij-idea

我有一些函数返回某个案例类的Try,我想检查Try中是否有某些内容我想使用它的值并将其添加到列表中,我的代码看起来像这样:

val resultLines = csvDataReader.iteratorWithHeaders.map(row => {
  val someTry = fonctionThatReturnsTryOfSomeCaseClass(someArgument)
  row ++ "key" -> someTry.map(a => a.someVal).getOrElse("")
})

我想要的输出是让resultLines充满行,但resultLines出现为空迭代器......

它确实有效,我收到了这个错误:

  

生成代码调用时出错:   com.intellij.debugger.engine.evaluation.EvaluateException:Method   抛出' java.lang.IllegalAccessError'异常。

1 个答案:

答案 0 :(得分:0)

您可以将Try转换为Option。然后,您可以将Option作为List。如果Try成功,则列表将具有一个元素,如果失败,则列表将具有零元素。

scala> Try{1}.toOption.toList
res1: List[Int] = List(1)

scala> Try{1/0}.toOption.toList
res2: List[Int] = List()

您可以将其附加到其他列表:

List(1,2,3) ++ Try{1/0}.toOption.toList // Nothing is added since Try fails
res3: List[Int] = List(1, 2, 3) 

List(1,2,3) ++ Try{1}.toOption.toList // Element added
res4: List[Int] = List(1, 2, 3, 1)