我想要迭代的列表包含一个数组。
我想做的是在迭代器中创建迭代器,以便我能够迭代每个列表元素中的数组。
我试过这样:
@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/