Scala 是否在可变哈希映射中将项添加到队列?

Scala 是否在可变哈希映射中将项添加到队列?,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. [

如何将项目添加到位于Scala
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]
)是可变的。