Scala:NodeSeq to Map

时间:2015-06-24 13:32:41

标签: scala

我猜不到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]

1 个答案:

答案 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))