Как преобразовать scala.collection.Iterator, содержащий тысячи объектов, в scala.collection.immutable.Vector?
Я не считаю, что я могу использовать _* из-за количества элементов.
Ответ 1
Вы можете
Vector() ++ myIterator
который дает правильную вещь с правильным типом. Для очень маленьких векторов и итераторов в высокопроизводительных циклах вы можете вместо этого
val b = Vector.newBuilder[WhateverType]
while (myIterator.hasNext) { b += myIterator.next }
b.result
который делает минимальную работу необходимой (насколько я знаю) для создания вектора. toIndexedSeq делает это по существу, но возвращает более общий тип (так что вы на самом деле не гарантировали Vector, даже если он возвращает Vector сейчас.)
Ответ 2
Вы можете использовать toIndexedSeq. Он не статически возвращает Vector, но на самом деле это один.
Ответ 3
Вы можете использовать _*, поскольку все, что он делает, это передать a Seq со всеми аргументами. Однако это будет неэффективно, поскольку он сначала преобразует итератор в последовательность, а затем использует эту последовательность для создания другой последовательности.
Ответ 4
Итератор теперь поддерживает .toVector, поскольку, как минимум, Scala 11 (а может и раньше).
class Thing
val myIterator = Iterator(new Thing, new Thing, new Thing)
myIterator.toVector