Перезаписать повторяющиеся значения в Scala List - PullRequest
0 голосов
/ 31 октября 2011

У меня есть следующий сервер 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) => {

            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")

Заранее спасибо за любую помощь, высоко ценится:)

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Это звучит как классический случай, когда вам нужна карта, а не список. Я не знаю о деталях Lift / Comet, но я думаю, вы хотите что-то вроде

    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)
    }
1 голос
/ 31 октября 2011

Если вы измените UserItem с того, чтобы быть классом с прямым регистром (я полагаю), чтобы он был классом с переопределением, равным игнорированию поля stamp, то вы можете превратить users в Set.

Кроме того, вы можете отфильтровать List, чтобы удалить старые совпадающие значения перед добавлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...