我有一些函数返回某个案例类的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'异常。
答案 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)