gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:48:15 24 4
gpt4 key购买 nike

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

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

我试过这样:

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com