将对象序列转换为字符串列表

Convert Seq of Objects to List of Strings

我是 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 案例 class:

/** 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

的名称

如果你有

val f: Future[Seq[UserDAOImpl.this.PermissionRow]] = ???

你可以做到

val f1: Future[List[String]] f.map(_.map(_.name).toList)

现在您可以将列表放入 Result

val res = f1.map(Ok(_))

和return它

到return一个Future你需要使用Action.async而不是Action

编辑:

如果您需要 Option[List[String]],您需要修改 Future 中的内容 Some(someFuture) 将不起作用,因为您将得到 Option[Future[List[String]]]。要更改 Future 中的内容,您应该使用地图。在你的情况下,你可以用

替换我上面给你的 res
val res: Future[Result[Option[List[String]]]] = f1.map(Ok(Some(_)))