gpt4 book ai didi

scala - 在 Scala 中 - 将案例类列表转换为元组列表

转载 作者:行者123 更新时间:2023-12-04 22:33:15 24 4
gpt4 key购买 nike

我有一个案例课

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()

但我不知道如何在列表上使用它:(
我用 foreach 尝试了一些东西,比如:
val list2: List[(String, Option[String])] = Nil
list1.foreach( x => list2 :: table.unapply(x).get())
'error (String,Option[String]) does not take parameters

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

预先感谢

PS:我实际上想更改列表的类型,因为我想在该列表上使用“.toMap”
- 喜欢:
val map1 = list1.toMap.withDefaultValue(None)

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

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

最佳答案

你想转换一个列表的每个元素,给出另一个列表。您需要 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)

关于scala - 在 Scala 中 - 将案例类列表转换为元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15113269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com