Контракт Iterator
должен быть «единственным прямым» способом итерации по серии объектов.
Как уже упоминалось в вашем комментарии, вы пытаетесь записать значения Iterator
, но все же используете итератор в другом месте.
Вы можете сделать что-то хитрое, обернув Iterator
пользовательским классом, который вызывает обернутый Iterator
и регистрирует значения при вызове метода next
.
Немного хакерский. В целом не рекомендуется, но может быть полезен при отладке.
Вы должны сконструировать это WrappedIterator
, используя исходный Iterator
в качестве параметра, а затем передать WrappedIterator
коду, который его использует.
public class WrappedIterator<T> implements Iterator<T> {
private Iterator<T> iterator;
public WrappedIterator(Iterator<T> iterator) {
this.iterator = iterator;
}
@Override
public void remove() {
this.iterator.remove();
}
@Override
public boolean hasNext() {
return this.iterator.hasNext();
}
@Override
public T next() {
T next = iterator.next();
System.out.println(next);
return next;
}
}