代码之家  ›  专栏  ›  技术社区  ›  Pratik

不使用Java DeepCopy迭代器

  •  0
  • Pratik  · 技术社区  · 6 年前

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

    Iterator iter2=copy(iter1);
    
    while(iter1.hasNext())
    {
        System.out.println(iter1.next()); // Should print this, even after copy
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   slipperyseal    6 年前

    合同 Iterator 是迭代一系列对象的“唯一前进”方式。

    正如您在评论中提到的,您正在尝试记录 迭代器 ,但仍然在其他地方使用迭代器。

    不过,您可以通过包装 迭代器 使用自定义类调用 迭代器 并将值记录为 next 方法被调用。

    有点老套。一般不推荐,但在调试情况下可能有用。

    你可以建造这个 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;
        }
    }