0

给定以下域模型:

case class Benefits(id: Int, benefitPlan: String, comment : String)

case class Employee(empNum : Int, benefits : List[Benefit])

我一直在使用 Salat 来帮助反序列化/反序列化这些对象。但是,鉴于我知道要删除/更新的对象的福利 ID,我对如何从员工对象的福利列表中删除/更新特定对象感到有些困惑?

我不想迭代完整的好处列表以更新单个对象,因为此列表在运行时可能包含大量对象。有没有比获取 emp 对象、迭代列表直到找到所需对象、更新它然后保存 emp 对象更好的方法?

4

2 回答 2

2

在这种情况下,我会说你benefits应该是一个Map[Int, Benefits].

如果您使用Map,您的更新/删除将是 O(1) 而不是线性时间。

List如果您需要随机访问和更新其中的元素,这不是一个好的选择。

于 2011-12-04T10:46:58.780 回答
0

我建议查看这篇关于 Casbah 和 Salat 的文章(假设您将 salat 用于 MongoDB)

def removeBenefit(empNum : Int, benefitId: Int)= {
  val updateQuery = $pull("benefits " -> MongoDBObject("id" -> benefitId))
  val query = MongoDBObject("empNum " -> empNum )
  modify(query, updateQuery) // your findAndModify operation goes here
}
于 2014-01-10T22:01:41.527 回答