【发布时间】:2015-08-27 01:22:22
【问题描述】:
如果我有一个 List[Try[Int]] 表示函数的一些结果。
scala> import scala.util._
scala> val result = List[Try[Int]](
Success(1),
Failure(new RuntimeException("first exception")),
Success(2),
Failure(new RuntimeException("second exception")))
如果我只是收集成功,我会隐藏异常
scala> result.collect{case Success(x)=>x}
res1: List[Int] = List(1, 2)
我可以分区,但结果需要进一步处理
scala> val res2 = result.partition(_.isSuccess)
res2: (List[scala.util.Try[Int]], List[scala.util.Try[Int]]) = (List(Success(1), Success(2)),List(Failure(java.lang.RuntimeException: first exception), Failure(java.lang.RuntimeException: second exception)))
scala> res2._1.collect{case Success(x)=>x}
res6: List[Int] = List(1, 2)
scala> res2._2.collect{case Failure(x)=>x}
res7: List[Throwable] = List(java.lang.RuntimeException: first exception, java.lang.RuntimeException: second exception)
如果我有 List[Try[Option[Int]]],这会变得更加复杂。
【问题讨论】:
-
你还没有描述你真正想对成功和失败做什么。您到底在寻找什么?
-
验证仍然没有涵盖你想要成功和失败的情况。
标签: scala scala-collections idioms