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

しかし、私はこれをリストで使用する方法がわかりません:(私はforeachで何かを試しました:

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

だから私の質問は->リストのすべてのタプルに適用解除を使用するにはどうすればよいですか?

少し早いですがお礼を


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です(これはunapply、理解の中で内部でどのように使用されているかを示していますfor

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