我想要迭代的列表包含一个数组。
我想要做的是在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()。
有人可以向我解释为什么这不起作用,以及如何做到与众不同?
答案 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