如何转换Seq [User]以便我可以将它传递给A * param?

时间:2017-02-07 19:38:04

标签: scala

我在集合中有一系列用户

e,a

我想把它传递给Queue.enqueue方法:

val users: Seq[User]

我可以预先收集我的收藏品,但我相信有一种方法可以正确转换它吗?

另外,什么是A *再次调用?

3 个答案:

答案 0 :(得分:4)

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

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

只有当您的收藏集是Seq时,或者可以将其隐式转换为Seq时,您才能使用此表示法。

答案 1 :(得分:2)

只要A是类型参数并且与User兼容(对于类型约束/方差):

enqueue(users: _*)

答案 2 :(得分:0)

如果队列是可变的,您可以使用其他答案所指出的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