Java DeepCopy迭代器没有使用它

时间:2018-05-08 04:30:52

标签: java iterator

如何在不消耗迭代器的情况下将迭代器复制到另一个迭代器?或者至少在我可以使用它之后我可以将索引重置回第一个元素。 我正在寻找类似下面的内容,它应该在复制后仍然打印值;

Iterator iter2=copy(iter1);

while(iter1.hasNext())
{
    System.out.println(iter1.next()); // Should print this, even after copy
}

1 个答案:

答案 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;
    }
}