Java - 尝试在迭代器中创建迭代器

时间:2013-11-24 19:20:24

标签: java iterator

我想要迭代的列表包含一个数组。

我想要做的是在Iterator中创建一个Iterator,这样我就可以在每个Listelement中迭代数组。

我试过这种方式:

@Override
public Iterator<A> iterator() {
    return new MyListIterator();
}

private class MyListIterator implements Iterator<A>, Iterable<B>
{
    private Listelem current;

    private MyListIterator() 
    {
        this.current = head;
    }

    @Override
    public boolean hasNext() 
    {
        return this.current != null;
    }

    @Override
    public A next() 
    {
        A next       = this.current.getValue();
        this.current = this.current.getSuccessor();
        return next;
    }

    @Override
    public void remove() 
    {
        Listelem tmp = head;
        while( tmp.getSuccessor().getSuccessor() != this.current ) 
        {
            tmp = tmp.getSuccessor();
        }
        tmp.setSuccessor(this.current);
    }

    @Override
    public Iterator<B> iterator() {
        return new MyInnerListIterator();
    }

    private class MyInnerListIterator implements Iterator<B>
    {
        private int currentIndex = 0;
        private B[] array = current.getAssoc();
        @Override
        public boolean hasNext() {
            return currentIndex < array.length && array[currentIndex] != null;
        }

        @Override
        public B next() {
            return array[currentIndex++];
        }

        @Override
        public void remove() {

        }

    }
}

问题是,当我使用iterator()创建第一个迭代器时,该对象不包含方法iterator()。

有人可以向我解释为什么这不起作用,以及如何做到与众不同?

1 个答案:

答案 0 :(得分:1)

问题是迭代器返回一个迭代器,即使在这种情况下它也恰好是一个MyListIterator。类Iterator没有iterator()函数。您需要让iterator()返回MyListIterator,以便您可以使用不在Iterator接口中的方法。 然而,简单地使用for:in循环可能更简单:

List<Object[]> list = ....
for (Iterator<Object[]> it = list.iterator(); it.hasNext();) {
    Object[] arr = it.next();
    for (Object o : arr) {
        ...
    }
}

如果您不需要从列表中删除元素,那么您可以将迭代器使用替换为另一个:in