我是scala的新手,我收到以下错误:
type mismatch;
[error] found : scala.concurrent.Future[Seq[UserDAOImpl.this.PermissionRow]]
[error] required: List[String]
[error] Some(db.run(unionPermissionQuery.result)),
我想将其从scala.concurrent.Future[Seq[UserDAOImpl.this.PermissionRow]]
转换为List[String]
,其中字符串为PermissionRow.name
PermissionRow
案例类:
/** Entity class storing rows of table Permission
* @param id Database column id SqlType(INT), AutoInc, PrimaryKey
* @param name Database column name SqlType(VARCHAR), Length(45,true)
* @param categorytype Database column categoryType SqlType(VARCHAR), Length(45,true)
* @param created Database column created SqlType(DATETIME)
* @param updated Database column updated SqlType(DATETIME) */
case class PermissionRow(id: Int, name: String, categorytype: String, created: Option[java.sql.Timestamp], updated: Option[java.sql.Timestamp])
派生列表应仅包含每个PermissionRow
答案 0 :(得分:2)
如果你有
val f: Future[Seq[UserDAOImpl.this.PermissionRow]] = ???
你可以做到
val f1: Future[List[String]] f.map(_.map(_.name).toList)
现在您可以将列表放在Result
val res = f1.map(Ok(_))
并将其退回
要返回Future
,您需要使用Action.async
代替Action
修改强>
如果您需要Option[List[String]]
,则需要修改Future
Some(someFuture)
内的内容将无效,因为您将获得Option[Future[List[String]]]
。要更改Future
内的内容,您应该使用map。在您的情况下,您可以使用
res
行
val res: Future[Result[Option[List[String]]]] = f1.map(Ok(Some(_)))