Я бы подумал, что Iterator.copy()
будет довольно удобной функцией. Вы могли бы реализовать фильтры итераторов гораздо лучше.
Например, единственная причина в Googles Java Collection для использования функций filter
(и аналогичных) UnmodifiableIterator
(что является просто Iterator
без remove
) состоит в том, что вы не можете реализовать такой фильтр Iterator
иначе без возможности скопировать его в какой-то момент. (Действительно, это невозможно с текущим интерфейсом; попробуйте сами.)
Еще одним преимуществом будет то, что вы можете использовать итератор в цикле for-each: поскольку копируемый итератор также автоматически будет повторяться. Смотрите также этот вопрос. В настоящее время основная причина, по которой это не разрешается, заключается в том, что Iterator
, в котором реализованы Iterable
и Iterator<T> iterator() { return this; }
, лишит законной силы итератор. Имея функцию copy
, она так же проста, как и Iterator<T> iterator() { return copy(); }
, и она не сделает недействительным исходный итератор. Таким образом, больше нет причин не позволять это.
Есть ли причина? Просто чтобы сделать его менее сложным для реализации?