案例类的Scala数组

时间:2017-07-20 19:16:36

标签: arrays scala class case

我有一个案例类。

case class Tax(state: String, code: String, pr: String, lic: String)

我使用playframework从H2数据库查询数据。查询返回多个列。以下是表格结构。

Create table t(key bigint primary key, state1 varchar(10), code1 varchar(15), pr1 varchar(1), lic1 varchar(10), state2 varchar(10), code2 varchar(15), pr2 varchar(1), lic2 varchar(10), state3 varchar(10), code3 varchar(15), pr3 varchar(1), lic3 varchar(10), state4 varchar(10), code4 varchar(15), pr4 varchar(1), lic4 varchar(10));

我想创建案例类的数组/列表,并在其中包含4种行。

val taxes= List[Tax]
  if (rs.next()) {
    var a=1
    while (!Option(rs.getString("state"+a)).getOrElse("").isEmpty){

      val tax = Taxonomy(rs.getString("state"+a),rs.getString("code"+a),rs.getString("pr"+a),rs.getString("lic"+a))
      //taxonomies = taxonomy Here I want to create array/list of taxonomy
      a = a + 1
      return taxonomy
    }
  }
} finally {
  conn.close()
}

1 个答案:

答案 0 :(得分:1)

关于数据库访问库的评论很好;这将是更好的长期。但根据您的使用情况,可能会有些过分。以下是我直接写这个的方法:

val taxes = if(rs.next()) {
  (1 to 4).map { a =>
    for {
      state <- Option(rs.getString("state"+a))
      code <- Option(rs.getString("code"+a))
      pr <- Option(rs.getString("pr"+a))
      lic <- Option(rs.getString("lic"+a))
    } yield Tax(state, code, pr, lic)
  }.toList.flatten
} else {
  List.empty[Tax]
}