Scala:更有效的方法来过滤列表并创建一系列期货

时间:2015-08-18 20:04:52

标签: 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的订单,然后创建一个{{1}的序列离开它。有没有更有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:8)

您可以使用filter

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