2017-02-07 20 views
-1

我有用戶的序列集合如何轉換一個Seq [User],以便我可以將它傳遞給A *參數?

val users: Seq[User] 

在我想它傳遞到Queue.enqueue方法,該方法:

def enqueue(elems : A*) 

我可以在我收集的foreach,但我相信有一種方法可以將其轉換爲正確的?

另外,什麼是A *再次調用?

+1

可能的重複[從Scala使用可變參數](http://stackoverflow.com/questions/1008783/using-varargs-from-scala) –

回答

4
A*

是一個可變參數的類型。要通過收集到這樣的功能,你可以使用特殊的變量參數,擴展語法,就像這樣:

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

你可以使用這個符號只有當你的收藏是Seq,或者如果可以隱式轉換爲一個Seq

2

只要A是一種類型的參數,並且是兼容(作爲類型約束/方差)與User

enqueue(users: _*) 
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 
相關問題