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

标签 java iterator

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

我想做的是在迭代器中创建迭代器,以便我能够迭代每个列表元素中的数组。

我试过这样:

@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 时,该对象不包含 iterator() 方法。

有人可以向我解释为什么这不起作用,以及如何做不同的事情吗?

最佳答案

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

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

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

关于Java - 尝试在迭代器中创建迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179758/

相关文章:

java - 通过spring-boot从h2数据库获取数据[JAVA]

c++ - 构造函数中的 noob Iterator 运行时错误

python - 在一系列上下文管理器上友好地使用 Python 可迭代对象

java - JPA 支持外连接,无需对象关系映射

java - 查询 Google App Engine JDO 中的两个实体

java - 绑定(bind)参数慢,使用 JdbcTemplate 更慢

c++ - 为什么 "!="与迭代器一起使用而不是 "<"?

java - maven-rar-plugin 包含配置设置为 false 的所有依赖项

c++ - 在不初始化的情况下使用 STL 迭代器

c++ - 嵌套迭代器和接口(interface)中的“无效协变返回类型”错误