Scala:更有效的过滤列表和创建 future 序列的方法

标签 scala future

给定一个列表 Order对象...

case class Order(val id: String, val orderType: Option[String])
case class Transaction (val id: String, ...)

val orders = List(Order(1, Some("sell")), Order(2, None), ...)

...我需要创建一个序列 Future s 用于所有具有类型的订单(即定义了 orderType):
val transactions: Seq[Future[Transaction]] = orders.filter(
  _.orderType.isDefined).map { case order =>
    trxService.findTransactions(order.id) // this returns a Future[Transaction]
  }
)

上面的代码首先调用 filter ,这会创建一个新的 List仅包含带有 orderType 的订单设置为 Some ,然后创建一个序列 Future不在了。有没有更有效的方法来实现这一目标?

最佳答案

您可以聚合filtermap使用 collect

val transactions: Seq[Future[Transaction]] = orders.collect {
  case order if order.orderType.isDefined => trxService.findTransactions(order.id)
}

关于Scala:更有效的过滤列表和创建 future 序列的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32081664/

相关文章:

c++ - `std::packaged_task` 是否需要 CopyConstructible 构造函数参数?

c++ - g++4.8 处理 vector future 的问题

scala - 为什么我的 Actors 调度在 Akka 中被缩小了?

Scala - 创建类型集合的惯用方式

scala - 从资源文件夹读取文件时出现空指针异常

scala - [A,Future [B]]到Future [E [[A,B]]

flutter - Dart Future。等待多个 future 并获得不同类型的结果

scala - 将列表转换为映射,其中键为 Scala 中的索引

scala - Spark 不同,然后加入给出 IndexOutOfBoundsException

java - 等待一批 future 完成时超时?