我無法從 fetchDiagnosisForUniqueCodes 回傳 Future[List[DiagnosisCode]]
import scala.concurrent._
import ExecutionContext.Implicits.global
case class DiagnosisCode(rootCode: String, uniqueCode: String, description: Option[String] = None)
object Database {
private val data: List[DiagnosisCode] = List(
DiagnosisCode("A00", "A001", Some("Cholera due to Vibrio cholerae")),
DiagnosisCode("A00", "A009", Some("Cholera, unspecified")),
DiagnosisCode("A08", "A080", Some("Rotaviral enteritis")),
DiagnosisCode("A08", "A083", Some("Other viral enteritis"))
)
def getAllUniqueCodes: Future[List[String]] = Future {
Database.data.map(_.uniqueCode)
}
def fetchDiagnosisForUniqueCode(uniqueCode: String): Future[Option[DiagnosisCode]] = Future {
Database.data.find(_.uniqueCode.equalsIgnoreCase(uniqueCode))
}
}
getAllUniqueCodes 回傳資料串列中的所有唯一代碼。
fetchDiagnosisForUniqueCode 在 uniqueCode 匹配時回傳 DiagnosisCode。
從 fetchDiagnosisForUniqueCodes,我想使用 getAllUniqueCodes() 和 fetchDiagnosisForUniqueCode(uniqueCode) 回傳 Future[List[DiagnosisCode]]。*
def fetchDiagnosisForUniqueCodes: Future[List[DiagnosisCode]] = { val xa: Future[List[Future[DiagnosisCode]]] = Database.getAllUniqueCodes.map { (xs: List[String]) => xs.map { (uq: String) => Database.fetchDiagnosisForUniqueCode(uq) } }.map(n => n.map(y=> y.map(_.head))) // Future[List[Future[DiagnosisCode]]] }
uj5u.com熱心網友回復:
如果我正確理解您的帖子,您的問題是:“如何將 a 轉換Future[List[Future[DiagnosisCode]]]為 a Future[List[DiagnosisCode]]?”
該問題的答案是:使用Future.sequence:
// assuming an implicit ExecutionContext is in scope:
val xa: Future[List[Future[DiagnosisCode]]] = // ... your code here
val flattened: Future[List[DiagnosisCode]] =
xa.flatMap { listOfFutures =>
Future.sequence(listOfFutures)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508576.html
上一篇:使用ScalagroupBy(),來自方法fetchUniqueCodesForARootCode()。我想獲取從rootCodes到uniqueCodes串列的映射
下一篇:將引數傳遞給Scala中的執行緒
