我试图不可改变的地图内保持文档类的列表:在这种情况下,我需要不可变的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