4

我有一个案例课

case class table(a: String, b: Option[String])

我有一个这种类型的列表 - 我们称之为 list1

val list1: List[table] = tabele.get() // just filling the list from an SQL 

现在我想将“表”列表更改为 (String,Option[String]) 的简单列表 我已经在此板上找到的是如何将案例类转换为这样的元组:

case class table(a:String, b:Int)
val (str, in) =  table.unapply(table("test", 123)).get()

但我不知道如何在 List 上使用它 :( 我尝试了一些 foreach 之类的东西:

val list2: List[(String, Option[String])] = Nil
list1.foreach( x => list2 :: table.unapply(x).get())
'error (String,Option[String]) does not take parameters

所以我的问题是-> 如何在列表的每个元组上使用 unapply?

预先感谢


PS:我实际上想更改列表的类型,因为我想在该列表上使用“.toMap” - 比如:

val map1 = list1.toMap.withDefaultValue(None)

出现错误:

Cannot prove that models.table <:<(T,U)

它适用于 (String, Option[String]) 列表

4

1 回答 1

11

您想将列表的每个元素转换为另一个列表。你需要foreach的表弟map

尝试:

 list1.map(table.unapply).flatten

这是一种更好的写作方式:

 list1.map( tbl => table.unapply(tbl) ).flatten

另一种方法是

 list1.map(table.unapply(_).get)

哪个是简写

 list1.map( tbl => table.unapply(tbl).get )

并且只是使用for: (这说明了如何unapplyfor理解中使用的版本)

 for (table(s,ms) <- list1) yield (s, ms)
于 2013-02-27T13:30:35.537 回答