О дубликате
Это не дубликат Как клонировать итератор?
Пожалуйста, не слепо закрывайте этот вопрос, все ответы, заданные в так называемой дублированной DO NOT работе. ОП отвечает за другую проблему, и, очевидно, ответы соответствуют ЕГО проблеме, но не моей.
Не каждый подобный вопрос является дубликатом, есть такая функция, как "вопрос расширения" на 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 и наоборот.
В приведенном выше примере используется Список, в настоящее время я борюсь с HashMap, но вопрос общий, просто итератор.
Подход № 1
Если вы отредактируете строку (*) и напишите:
var it2 = it1.toList.iterator
(это было предложено как решение в связанном вопросе) исключение бросается при выполнении программы.
Подход № 2
"Вы берете список и...". Нет, не знаю. У меня нет списка, у меня есть итератор. В общем, я ничего не знаю о коллекции, которая лежит в основе итератора, единственное, что у меня есть, это итератор. Я должен "разветкить" его.