scala - Scala 将数字添加到 Future[List[Try[Option[Int]]]]
问题描述
我有一个类型的变量,Future[List[Try[Option[Int]]]]
我需要向它添加 +1。我如何在不使用compose()
方法的情况下通过这些类型谢谢
解决方案
一种可能的解决方案可能是:
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)
推荐阅读
- java - 数数并打印均匀的花朵
- pandas - 有没有办法将 sqlalchemy 表对象列表读取到 pandas df?
- java - 无法调用“org.openqa.selenium.JavascriptExecutor.executeScript(String, Object[])”,因为“jse”为空
- system-verilog - Is there a method to execute a block of code after a user calls $finish?
- swiftui - 使视图与另一个在 SwiftUI 中具有动态大小的视图具有相同的大小
- css - 仅当宽度和高度都更改时才更改图像大小
- python - 如何吞下 BigQuery 异常?
- .net - 如何使用 F# 和 SQLProvider 连接到 MS SQL Server?
- base64 - 为什么有些 base64 字符串不能对称编码?
- arrays - 如何快速将字典数组转换为字典?