【发布时间】:2019-12-13 03:35:04
【问题描述】:
我的实体类中有以下关系,
customer -> * Invoice
现在我必须实现一个方法,用他们的发票返回客户
type CustomerWithInvoices = (Custimer,Seq[Invoice])
def findCustomerWitnInvoices:Future[Seq[CustomerWithInvoices]] = {
for{
customers <- findCustomers
eventualInvoices: Seq[Future[Seq[Invoice]]] = customers.map(customer => findInvoicesByCustomer(customer))
} yield ???
}
使用现有的存储库方法如下
def findCustomers:Future[Seq[Customers]] = {...}
def findInvoicesByCustomer(customer:Customer):Future[Seq[Invoice]] = {...}
我尝试使用上述for 表达式,但我无法找到正确的方法,因为我对 Scala 还很陌生,非常感谢任何帮助..
【问题讨论】:
-
您无法将其映射到
Future[(Customer, Seq[Invoice])],因为每个客户有多个客户和多个发票。您可能想要Future[Seq[(Customer, Seq[Invoice])]](或带有别名的Future[Seq[CustomerWithInvoices]])。 -
抱歉我的错误@marstran 你是对的,我打错了签名
-
我认为你需要在for-comp的第二行有一个箭头,否则你会堆叠期货并最终得到可怕的类型
Future[Future[Blabla]] -
也许:
findCustomers.flatMap { customers => Future.traverse(customers)(customer => findInvoicesByCustomer(customer).map(invoices => (customer -> invoices)) ) }。 - 当你混合两种不同的类型时,理解并不是很好。 -
@LuisMiguelMejíaSuárez 正是我想要的,谢谢