Как скопировать итератор в Scala?

О дубликате

Это НЕ дубликат Как клонировать итератор?

Пожалуйста, не закрывайте вслепую этот вопрос, все ответы, данные в -названный дубликат НЕ РАБОТАЕТ . OP отвечает за другую проблему, и, очевидно, ответы соответствовали ЕГО проблеме, но не моей.

Не каждый подобный вопрос является дубликатом, в SE есть такая функция, как «дополнительный вопрос», единственный способ - задать еще раз на ту же тему, чтобы получить разные, работающие ответы.

Задача

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

Важно

Копирование посредством отражения или сериализации недопустимо (снижение производительности).

Пример

var list = List(1,2,3,4,5)
var it1 = list.iterator
it1.next()

var it2 = it1   // (*)
it2.next()

println(it1.next())

Это будет просто ссылка на it1 , поэтому при изменении it1 , it2 также изменяется, и наоборот.

В приведенном выше примере используется List , сейчас я борюсь с HashMap , но вопрос общий - просто итератор.

Подход №1

Если вы редактируете строку (*) и пишете:

var it2 = it1.toList.iterator

(это было предложено в качестве решения в связанном вопросе), во время выполнения программы выдается исключение.

Подход №2

«Вы берете список и ...». Нет, не знаю. У меня нет списка, у меня есть итератор. В общем, я ничего не знаю о коллекции, лежащей в основе итератора, единственное, что у меня есть, это итератор. Я должен его «раскошелиться».

16
задан Community 23 May 2017 в 12:18
поделиться