我試圖不可改變的地圖內保持文檔類的列表:在這種情況下,我需要不可變的Map嗎?
object DocumentModel extends App{
case class Document(title : String , text : String)
val documentMap = Map[org.joda.time.DateTime , Document]()
def addDocument(d : Document) : Map[org.joda.time.DateTime , Document]= {
documentMap + (new org.joda.time.DateTime -> d)
}
addDocument(Document("title" , "text"))
println("size is "+addDocument(Document("title" , "text")).size);
}
當訪問documentMap
它的大小是一致的一個,每次在方法addDocument
返回的地圖只是附加元素相同的不可變集合。
如何追加到不可變的Map並返回它的值還是需要使用immutable Map?
更新:
一種選擇是使用:
object DocumentModel extends App{
case class Document(title : String , text : String)
var id = Map[org.joda.time.DateTime , Document]()
def addDocument(d : Document) : Map[org.joda.time.DateTime , Document]= {
id = id + (new org.joda.time.DateTime -> d)
id
}
addDocument(Document("title" , "text"))
println("size is "+addDocument(Document("title" , "text")).size);
println("size is "+addDocument(Document("title" , "text")).size);
}
但這不是線程安全
不變本身意味着它不能被改變意味着它不能被修改。在你的情況下,你只是返回一個新的地圖。使用var和不可變映射OR val和可變映射。 – curious 2015-04-02 09:45:45