Scala 是否在可变哈希映射中将项添加到队列?
如何将项目添加到位于ScalaScala 是否在可变哈希映射中将项添加到队列?,scala,Scala,如何将项目添加到位于Scalamutable.hashmap中的队列 我试过这个: val hashMapUserListeners: mutable.HashMap[UUID, mutable.Queue[UUID]] hashMapUserListeners.get(uuid) += uuid2 但我犯了这个错误: [error]Expression does not convert to assignment because receiver is not assignable. [
mutable.hashmap
中的队列
我试过这个:
val hashMapUserListeners: mutable.HashMap[UUID, mutable.Queue[UUID]]
hashMapUserListeners.get(uuid) += uuid2
但我犯了这个错误:
[error]Expression does not convert to assignment because receiver is not assignable.
[error]hashMapUserListeners.get(uuid) += uuid2
实际代码段:
def listenUserStatus(actorRef: ActorRef, message: SocketParsedMessage)={
(message.data \ "userId").validate[UUID] match {
case s: JsSuccess[UUID] => {
if(hashMapUserListeners.contains(s.get)){
if(!hashMapUserListeners.get(s.get).contains(hashMapA2U.get(actorRef))) {
hashMapUserListeners.get(s.get) += hashMapA2U.get(actorRef)
}
} else{
hashMapUserListeners += (s.get -> new mutable.Queue[UUID]())
}
}
case e: JsError => actorRef ! SocketParsedMessage(
AllowedSocketMessageTypes.LISTEN_USER_STATUS, Json.obj(
"success" -> false,
"message" -> "UserId not provided with request"
))
这不起作用,因为
mutable.HashMap.get
返回一个选项[Queue[UUID]]
,而不是队列[UUID]
。您需要在选项下使用foreach
更新基础队列:
val maybeUuids: Option[mutable.Queue[UUID]] = hashMapUserListeners.get(uuid)
maybeUuids.foreach(queue => queue += uuid2)
最后我把我的代码改成了下面的代码
hashMapUserListeners.get(s.get) match {
case Some(currentQueue) => {
if(!currentQueue.contains(s.get)){
currentQueue += userId
}
}
对于那些对完整代码感兴趣的人
def listenUserStatus(actorRef: ActorRef, message: SocketParsedMessage): Unit = {
hashMapA2U.get(actorRef) match {
case Some(user) => {
(message.data \ "userId").validate[UUID] match {
case s: JsSuccess[UUID] => {
hashMapUserListeners.get(s.get) match {
case Some(x) => {
case Some(currentQueue) => {
if(!currentQueue.contains(s.get)){
currentQueue += userId
}
}
case None => hashMapUserListeners += (s.get -> new mutable.Queue[UUID]())
}
}
case e: JsError => actorRef ! SocketParsedMessage(
AllowedSocketMessageTypes.LISTEN_USER_STATUS, Json.obj(
"success" -> false,
"message" -> "UserId not provided with request"
))
}
}
case None => {
actorRef ! SocketParsedMessage(
AllowedSocketMessageTypes.AUTHENTICATE, Json.obj(
"success" -> false,
"message" -> "User not authenticated"
))
}
}
}
请参阅文档:@Pavel我知道如何将项目添加到Hashmap,我想在Hashmap中向quee添加更多项目,而不进行克隆并向其中添加项目。您添加到HasMap的项目看起来是不可变的,请提供队列定义etc@Pavel我添加了实际的代码片段,没有队列(mutable.queue[UUID]
)是可变的。