Scala 2.12 имеет улучшение на Future.transform
, которое поддается андерсеру с меньшим количеством кодов.
val futures = Seq(Future{1},Future{throw new Exception})
val seq = Future.sequence(futures.map(_.transform(Success(_)))) // instead of map and recover
@val successes = seq.map(_.collect{case Success(x)=>x})
successes: Future[Seq[Int]] = Future(Success(List(1)))
@val failures = seq.map(_.collect{case Failure(x)=>x})
failures: Future[Seq[Throwable]] = Future(Success(List(java.lang.Exception)))