【问题标题】:How to convert a Seq[User] so that I can pass it into A* param?如何转换 Seq[User] 以便我可以将其传递给 A* 参数?
【发布时间】:2017-02-08 04:21:31
【问题描述】:

我在一个集合中有一系列用户

val users: Seq[User]

我想将它传递到 Queue.enqueue 方法中:

def enqueue(elems : A*) 

我可以对我的收藏进行 foreach,但我确定有办法转换它吗?

还有,A*又叫什么?

【问题讨论】:

标签: scala


【解决方案1】:

A* 是可变参数类型。要将集合传递给这样的函数,您可以使用特殊的 vararg-expansion 语法,如下所示:

queue.enqueue(seq: _*) // If queue is of type Queue[User].

仅当您的集合是 Seq,或者可以隐式转换为 Seq 时,您才能使用此表示法。

【讨论】:

    【解决方案2】:

    只要A 是类型参数并且与User 兼容(就类型约束/变量而言):

    enqueue(users: _*)
    

    【讨论】:

      【解决方案3】:

      如果队列是可变的,您可以使用enqueue,正如其他答案所指出的那样 或使用++=

      scala> val mQueue = scala.collection.mutable.Queue[Int](1, 2, 3, 4, 5)
      mQueue: scala.collection.mutable.Queue[Int] = Queue(1, 2, 3, 4, 5)
      
      scala> val aSeq = Seq[Int](6, 7, 8, 9, 10)
      aSeq: Seq[Int] = List(6, 7, 8, 9, 10)
      
      scala> mQueue ++= aSeq
      res26: mQueue.type = Queue(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
      

      如果队列是不可变的,则必须使用enqueue,如下所示:

      scala> val imQueue = scala.collection.immutable.Queue[Int](1, 2, 3, 4, 5)
      imQueue: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3, 4, 5)
      
      scala> imQueue.enqueue(aSeq.toList)
      res32: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
      

      在不可变的情况下,顾名思义,imQueue 不会更新,而是 返回另一个不可变队列。

      scala> imQueue
      res33: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3, 4, 5) // still original values
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        • 2013-01-05
        • 1970-01-01
        相关资源
        最近更新 更多