不使用Java DeepCopy迭代器
如何将迭代器复制到另一个迭代器而不使用它?或者至少如果我可以在使用它之后将索引重置回第一个元素。 我正在寻找下面这样的东西,在那里它仍然应该打印复制后的值不使用Java DeepCopy迭代器,java,iterator,Java,Iterator,如何将迭代器复制到另一个迭代器而不使用它?或者至少如果我可以在使用它之后将索引重置回第一个元素。 我正在寻找下面这样的东西,在那里它仍然应该打印复制后的值 Iterator iter2=copy(iter1); while(iter1.hasNext()) { System.out.println(iter1.next()); // Should print this, even after copy } 迭代器的契约是迭代一系列对象的“唯一正向”方式 正如您在评论中提到的,您试图记
Iterator iter2=copy(iter1);
while(iter1.hasNext())
{
System.out.println(iter1.next()); // Should print this, even after copy
}
迭代器的契约是迭代一系列对象的“唯一正向”方式
正如您在评论中提到的,您试图记录一个迭代器的值,但仍然在其他地方使用迭代器
不过,您可以通过使用自定义类包装迭代器来完成一些棘手的工作,该类调用包装的迭代器
,并在调用下一个
方法时记录值
有点老套。一般不推荐,但在调试情况下可能有用
您可以使用原始的迭代器
作为参数构造这个WrappedIterator
,然后将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;
}
}
公共类WrappedIterator实现迭代器{
私有迭代器;
公共包装器(迭代器迭代器){
this.iterator=迭代器;
}
@凌驾
公共空间删除(){
this.iterator.remove();
}
@凌驾
公共布尔hasNext(){
返回this.iterator.hasNext();
}
@凌驾
公共交通工具{
T next=iterator.next();
System.out.println(下一步);
下一步返回;
}
}
为什么要深度复制迭代器?这看起来像是一个。请告诉我们您试图解决的问题,而不是您尝试的解决方案。迭代器是一个一次性的对象,可以一次又一次地构造,因此深度复制它没有任何意义。我正在尝试从迭代器的某个地方记录值。@Pratik否Interator的功能是迭代值的唯一正向方式。不过,您可以通过使用自定义类包装迭代器来完成一些棘手的工作,该类调用包装的迭代器,并在调用下一个方法时记录值。但这有点老套。