首页 > 解决方案 > Scala 将数字添加到 Future[List[Try[Option[Int]]]]

问题描述

我有一个类型的变量,Future[List[Try[Option[Int]]]]我需要向它添加 +1。我如何在不使用compose()方法的情况下通过这些类型谢谢

标签: scala

解决方案


一种可能的解决方案可能是:

val x = Future.successful(List(Success(Some(1))))

def incr(x: Future[List[Try[Option[Int]]]]): Future[List[Try[Option[Int]]]] = {
  x.map { _.map {
    case Success(Some(num)) => Success(Some(num + 1))
    case other @ _ => other
  }}
}

val res = Await.result(incr(x), Duration.Inf)
println(res) // 2

另一种可以是:

x.map(_.map(_.map(_.map(_ + 1))))

如果您还想收集所有相关值以供将来使用:

val f1 = Future.successful(List(Success(Some(1))))
val f2 = Future.successful(List(Success(Option.empty[Int])))


def incr(future: Future[List[Success[Option[Int]]]]): Future[List[Int]] = {
  future.map { _.collect {
    case Success(Some(num)) => num + 1
  }}
}

assert(Await.result(incr(f1), Duration.Inf).head == 2)
assert(Await.result(incr(f2), Duration.Inf).isEmpty)

推荐阅读