我猜不到map
方法......
尝试阅读文件:
val messagesMap = XML.loadFile(messageXMLFile).map(parseMessageXML)
方法parseMessageXML
定义为:
def parseMessageXML(xml : scala.xml.Node) = {
val nodes = xml \\ "add"
nodes.map({
node =>
val obj = new AdMessage(node)
println("adding an AdMessage " + obj.toString)
(obj.MessageId -> obj)
}).toMap
}
任何人都可以解释为什么我最终得到的是Seq[Map[String, AdMessage]]
,而不仅仅是Map[String, AdMessage]
?
答案 0 :(得分:2)
map
会将Seq
的每个元素转换为另一个元素。
例如:
scala> Seq("One", "Two", "Three").map(_.length())
res0: Seq[Int] = List(3, 3, 5)
由于String
功能,每个Int
已映射 成为length
。因此,原始类型为Seq[String]
,最终类型为Seq[Int]
在您的情况下,parseMessageXML
会将Node
转换为Map[String, AdMessage]
,因此原始类型为Seq[Node]
,最终类型为Seq[Map[String, AdMessage]]
。
在您的情况下,假设您只想将文件内容转换为Map[String, AdMessage]
:
val messagesMap = parseMessageXML(XML.loadFile(messageXMLFile))