【问题标题】:Retrieving a list of tuples with the Scala anorm stream API使用 Scala 异常流 API 检索元组列表
【发布时间】:2013-10-03 18:24:00
【问题描述】:

当我在 Play 中阅读时! docs 我找到了一种将结果解析为 List[(String, String)]

的方法

像这样:

// Create an SQL query
val selectCountries = SQL("Select * from Country")

// Transform the resulting Stream[Row] as a List[(String,String)]
val countries = selectCountries().map(row => 
row[String]("code") -> row[String]("name")
).toList

我想这样做,但我的元组将包含更多数据。

我是这样做的:

val getObjects = SQL("SELECT a, b, c, d, e, f, g FROM table")
  val objects = getObjects().map(row =>
    row[Long]("a") -> row[Long]("b") -> row[Long]("c") -> row[String]("d") -> row[Long]("e") -> row[Long]("f") -> row[String]("g")).toList

我得到的每个元组都将采用这种格式,当然,这就是我在上面的代码中要求的:

((((((Long, Long), Long), String), Long), Long), String)

但我想要这个:

(Long, Long, Long, String, Long, Long, String)

我要问的是我应该如何解析结果以生成一个像上面最后一个一样的元组。我想像他们在 List[(String, String)] 文档中所做的那样做,但需要更多数据。

谢谢

【问题讨论】:

    标签: scala playframework tuples scala-collections


    【解决方案1】:

    由于->,您将获得((((((Long, Long), Long), String), Long), Long), String),每次调用此函数都会将两个元素包装成一对。因此,对于每个->,你都有一个元组,然后你把这个元组创建一个新的,等等。你需要用逗号更改箭头并换成()

    val objects = getObjects().map(row =>
        (row[Long]("a"), row[Long]("b"), ..., row[String]("g")).toList
    

    但请记住,当前元组中的元素不能超过 22 个。

    【讨论】:

    • 我知道-> 是这样的,我尝试使用, 却没有运气。但是我现在看到您添加了(),而我没有。马上试试看!
    • 谢谢@Alexlv,我错过了()。错过这么小的事情感觉很愚蠢。
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2015-08-15
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多