Есть ли какой-нибудь сжатый способ преобразования Seq
в ArrayBuffer
в Scala?
Преобразование Seq в ArrayBuffer
Ответ 1
scala> val seq = 1::2::3::Nil
seq: List[Int] = List(1, 2, 3)
scala> seq.toBuffer
res2: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3)
EDIT После Scala 2.1x существует метод .to[Coll]
, определенный в TraversableLike, который может использоваться как следовать:
scala> import collection.mutable
import collection.mutable
scala> seq.to[mutable.ArrayBuffer]
res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)
scala> seq.to[mutable.Set]
res2: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
Ответ 2
Это будет работать:
ArrayBuffer(mySeq : _*)
Некоторые объяснения: это использует метод apply в объекте-компаньоне ArrayBuffer. Подпись этого метода
def apply [A] (elems: A*): ArrayBuffer[A]
означает, что он принимает переменное количество аргументов. Например:
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8)
также является действительным вызовом. Атрибут: _ * указывает компилятору, что вместо этого переменного количества аргументов следует использовать Seq (см. Раздел 4.6.2 в Scala Reference).