给出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}的序列离开它。有没有更有效的方法来实现这一目标?
答案 0 :(得分:8)
您可以使用filter
map
和collect
val transactions: Seq[Future[Transaction]] = orders.collect {
case order if order.orderType.isDefined => trxService.findTransactions(order.id)
}