覆盖Scala列表中的重复值
我有以下Comet服务器:覆盖Scala列表中的重复值,scala,Scala,我有以下Comet服务器: object UserServer extends LiftActor with ListenerManager { private var users: List[UserItem] = Nil def createUpdate = users override def lowPriority = { case UserItem(user, room, active, stamp) => {
object UserServer extends LiftActor with ListenerManager {
private var users: List[UserItem] = Nil
def createUpdate = users
override def lowPriority = {
case UserItem(user, room, active, stamp) => {
users :+= UserItem(user, room, active, stamp);
updateListeners()
}
}
}
当前,每次提交表单时,都会向用户列表中添加一个新的UserItem。我想做的是,每次服务器接收到一个新用户时,它都应该用相同的用户和文件室句柄覆盖现有的项目,而不是连接到列表
因此,如果列表包含以下内容:
UserItem("jam_2323", "demo-room", "James", "1320073365")
UserItem("jim_4533", "demo-room", "Jim", "1320073365")
这些用户下次提交表单时,列表中的上述两项将替换为新的戳记值:
UserItem("jam_2323", "demo-room", "James", "1320073435")
UserItem("jim_4533", "demo-room", "Jim", "1320073435")
提前感谢您的帮助,非常感谢:)如果您将
UserItem
从一个直接的case类(我假设)调整为一个覆盖等于忽略stamp
字段的类,那么您可以将users
设置为集合
或者,您可以过滤列表
,在追加之前删除旧的匹配值。如果您将UserItem
从一个直格类(我假设)调整为一个覆盖等于忽略stamp
字段的类,那么您可以将users
设置为一个集合
或者,您可以过滤列表
,在追加之前删除旧的匹配值。这听起来像是一个经典案例,您需要一个映射,而不是一个列表。我不知道电梯/彗星的细节,但我想你想要类似的东西
case class User(id: String)
case class Activity(room: String, active: String, stamp: String)
var lastUserActivity = Map[User, Activity]()
...
case UserItem(id, room, active, stamp) => {
lastUserActivity += User(id) -> Activity(room, active, stamp)
}
这听起来像是一个需要地图而不是列表的经典案例。我不知道电梯/彗星的细节,但我想你想要类似的东西
case class User(id: String)
case class Activity(room: String, active: String, stamp: String)
var lastUserActivity = Map[User, Activity]()
...
case UserItem(id, room, active, stamp) => {
lastUserActivity += User(id) -> Activity(room, active, stamp)
}
作为旁注,您可以简单地将其作为对象进行匹配,而不是提取和重建UserItem
。您还应该在列表
前加前缀,或者使用向量
;附加到列表执行得非常糟糕case u:UserItem=>users::=u
。作为旁注,您不需要提取和重建UserItem
,只需将其作为对象进行匹配即可。您还应该在列表
前加前缀,或者使用向量
;附加到列表执行得非常糟糕<代码>案例u:UserItem=>用户::=u
。