Tôi muốn tạo một loại đối tượng phức tạp hơn Danh sách từ một Danh sách loại đơn giản. Ví dụ: List[String] => List[MyType]
.Chuyển đổi Danh sách Scala thành Danh sách với một loại khác
Tôi đã cung cấp cho nó ba cách sử dụng các phương pháp dựa trên bản đồ. Một bản đồ đơn giản với wildcard:
> case class telecom (name:String, longitude:Double, latitude:Double)
defined class telecom
> List("foo","bar").map(x:String => telecom(x,0,0)):List[telecom]
:1: error: ';' expected but ')' found.
Một phương pháp mô hình khớp có sử dụng các nhà xây dựng trường lớp:
> def foo(c:List[String]){
| c match {
| case tc:List[telecom] => tc.map(telecom(_,0,0)):List[telecom]; println("matched telephonecomapny");
| case _ => println("matched nothing"); throw new ClassCastException(); }}
warning: there were unchecked warnings; re-run with -unchecked for details
foo: (c: List[String])Unit
> foo(List("foo","bar"))
java.lang.ClassCastException: java.lang.String cannot be cast to usda.rd.broadband.model.DatabaseTables$TelephoneCompany
at $anonfun$foo$1.apply(<console>:11)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:206)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:206)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:206)
at scala.collection.immutable.List.map(List.scala:45)
at .foo(<console>:11)
at .<init>(<console>:11)
at .<clinit>(<console>)
at RequestResult$.<init>(<console>:9)
at RequestResult$.<clinit>(<console>)
at RequestResult$scala_repl_result(<console...
và một phương pháp mô hình khớp đơn giản:
> def bar(c:List[String]){
| c match {
| case tc:List[telecom] => tc
| case _ => println("matched nothing")}}
warning: there were unchecked warnings; re-run with -unchecked for details
foo: (c: List[String])Unit
> val r = bar(List("foo","bar"))
t: Unit =()
Đối sánh mẫu khớp _ đã có ở đó_. Bạn không thể sử dụng hành động phù hợp để chuyển đổi dữ liệu của bạn! Bạn đang yêu cầu, "Đưa ra một danh sách các chuỗi, _if họ đã là một danh sách các telecoms_, sau đó (blah blah)!" –