2015-06-24 210 views
1

我不能把握map方法我想..斯卡拉:NodeSeq到地圖

試圖讀取一個文件:

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

嘗試'VAL messagesMap = parseMessageXML(XML.loadFile(messageXMLFile))' –

+0

@PeterNeyens是s它..你可以添加它作爲一個答案與一些解釋我做錯了上面的代碼片段與地圖()。和toMap()? –

回答

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變換的NodeMap[String, AdMessage],所以原來的類型是Seq[Node],最終類型爲Seq[Map[String, AdMessage]]

在你的情況下,假設你只想將文件的內容轉換成Map[String, AdMessage]

val messagesMap = parseMessageXML(XML.loadFile(messageXMLFile)) 
+0

現在晶瑩剔透! MERCI! –