如何在不消耗迭代器的情况下将迭代器复制到另一个迭代器?或者至少在我可以使用它之后我可以将索引重置回第一个元素。 我正在寻找类似下面的内容,它应该在复制后仍然打印值;
Iterator iter2=copy(iter1);
while(iter1.hasNext())
{
System.out.println(iter1.next()); // Should print this, even after copy
}
答案 0 :(得分:1)
Iterator
的合同是迭代一系列对象的“唯一前进”方式。
正如评论中所提到的,您正在尝试记录Iterator
的值,但仍在其他地方使用Iterator。
您可以通过使用调用包装Iterator
的自定义类包装Iterator
来执行一些棘手的操作,并在调用next
方法时记录这些值。
有点hacky。一般不推荐,但在调试情况下可能很有用。
您可以使用原始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;
}
}