尝试映射元组列表时出现编译错误。我有一个返回Future[List[(String, String)]]
的方法,我需要使用这两组String值来调用另一个方法
def myHelper(): Future[List[(String, String)]] = { ... }
def myWork() = {
myHelper() map {
case(firstVal, secondVal) => otherWork(firstVal, secondVal)
}
}
我得到的错误是
found: (T1, T2)
required: List[(String, String)]
有什么建议吗?
修改
嗯....我不清楚我的问题。 otherWork
期望所有结果的列表
def otherWork(firstVals: List[String], secondVals: List[Strong]) = { ... }
答案 0 :(得分:2)
取决于你想做什么。
在每个元组上调用otherWork
?
def myWork() = {
myHelper().map(_.map {
case (firstVal, secondVal) => otherWork(firstVal, secondVal)
})
}
如果otherWork: (String, String) => T
,则myWork: () => Future[List[T]]
。
如果otherWork: (String, String) => Future[T]
并且您想要全部运行它们并收集结果,那么您可以使用类似
def myWork() = {
myHelper() flatMap { list => Future.sequence(
list map { case (firstVal, secondVal) =>
otherWork(firstVal, secondVal)
})
}
}
问题澄清后,您需要unzip
。
def myWork() = {
myHelper() map { list =>
list.unzip match {
case (firstVals, secondVals) => otherWork(firstVals, secondVals)
}
}
}
Federico Pellegatta的答案有一个较短的写作形式。
答案 1 :(得分:2)
让我们将myWork
函数实现为:
def myWork = myHelper.map {
helper => (otherWork _).tupled(helper.unzip)
}