我有一个案例类
case class table(a: String, b: Option[String])
我有一个该类型的列表 - 让我们称之为list1
val list1: List[table] = tabele.get() // just filling the list from an SQL
现在我想将“table”列表更改为(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])列表
答案 0 :(得分:10)
您希望转换列表中的每个元素,并给出另一个列表。您需要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
投入一个版本:(这说明unapply
在for
理解中如何使用 for (table(s,ms) <- list1) yield (s, ms)
{{1}}