Преобразование итератора Scala в вектор - PullRequest
11 голосов
/ 12 марта 2012

Как мне преобразовать scala.collection.Iterator, содержащий тысячи объектов, в scala.collection.immutable.Vector?

Я не верю, что могу использовать _* из-за количества предметов.

Ответы [ 3 ]

14 голосов
/ 12 марта 2012

Вы можете

Vector() ++ myIterator

, который дает правильную вещь с правильным типом. Для очень маленьких векторов и итераторов в высокопроизводительных циклах вы можете вместо этого захотеть

val b = Vector.newBuilder[WhateverType]
while (myIterator.hasNext) { b += myIterator.next }
b.result

, который выполняет минимальную работу, необходимую (насколько я знаю) для создания вектора. toIndexedSeq, по сути, делает это, но возвращает более общий тип (поэтому на самом деле вам не гарантируется Vector, даже если он действительно возвращает Vector сейчас.)

6 голосов
/ 12 марта 2012

Вы можете использовать toIndexedSeq.Статически он не возвращает Vector, но фактически равен единице.

1 голос
/ 13 марта 2012

Вы можете использовать _*, поскольку все, что он делает, это передает Seq со всеми аргументами.Однако это будет неэффективно, поскольку сначала он преобразует итератор в последовательность, а затем использует эту последовательность для создания другой последовательности .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...