我在以下代码中尝试将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
?
我想使用一个不可变的变量。
答案 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)*
。