将字符串转换为LikedHashMap

时间:2016-06-15 11:44:22

标签: scala

我在以下代码中尝试将String转换为LinkedHashMap

val transactins: LinkedHashMap[String, Extraction] = entries.split("\n").map(
  t => {
    val x: List[String] = t.split("|").toList
    (x(0), Extraction(x(1), x(2), x(3)))
  }
).toMap

该字符串具有以下格式:

 "A|xxx|yyy|zzz\n
  B|xxx|yyy|zzz\n
  C|xxx|yyy|zzz\n"

我的代码没有编译,因为它没有返回LinkedHashMap

Error:(18, 7) polymorphic expression cannot be instantiated to expected type;
 found   : [T, U]scala.collection.immutable.Map[T,U]
 required: scala.collection.mutable.LinkedHashMap[String,Extraction]
    ).toMap
      ^

我不得不知道如何做到这一点。 那么如何将表达式转换为LinkedHashMap

我想使用一个不可变的变量。

1 个答案:

答案 0 :(得分:3)

使用LinkedHashMap' .apply方法:

scala> import scala.collection.mutable.LinkedHashMap
import scala.collection.mutable.LinkedHashMap

scala> case class Extraction(s1: String, s2: String, s3: String);
defined class Extraction

scala> val entries = """A|xxx|yyy|zzz
     | B|xxx|yyy|zzz
     | C|xxx|yyy|zzz"""
entries: String =
A|xxx|yyy|zzz
B|xxx|yyy|zzz
C|xxx|yyy|zzz

scala> val transactins: LinkedHashMap[String, Extraction] = LinkedHashMap(entries.split("\n").map(
         t => {
           val x: List[String] = t.split("|").toList
           (x(0), Extraction(x(1), x(2), x(3)))
         }):_*
       )
transactins: scala.collection.mutable.LinkedHashMap[String,Extraction] = Map(A -> Extraction(|,x,x), B -> Extraction(|,x,x), C -> Extraction(|,x,x))

请注意,.apply方法采用不同数量的参数(由*
表示 在(elems: (A, B)*))中,您需要使用:_*Array[(String, Extraction)]转换为(String, Extraction)*