Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用Java DeepCopy迭代器_Java_Iterator - Fatal编程技术网

不使用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的功能是迭代值的唯一正向方式。不过,您可以通过使用自定义类包装迭代器来完成一些棘手的工作,该类调用包装的迭代器,并在调用下一个方法时记录值。但这有点老套。