将对象的Seq转换为字符串列表

时间:2015-12-04 11:21:27

标签: scala playframework-2.0 slick

我是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

的名称

1 个答案:

答案 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(_)))