2017-07-14 77 views
1

我有以下的Java代码:Java匿名迭代器?

while (pOn[j].iterator().hasNext()) { 
    stats.decrement(getNodeCase((int) (pOn[j].iterator().next()), hidden, o)); 
} 

目前,它不会终止。我怀疑这是因为pOn [j] .iterator()每次都返回一个新的迭代器。有没有办法解决这个问题,而不是将迭代器分配给临时变量?谢谢。

编辑:我不小心把这条线不应该在那里。 pOn[j].iterator().next();。我已经删除它。

+0

对于为什么不终止您是正确的。你为什么不想要一个临时变量? –

+1

每次调用'iterator()'时,都会创建一个* new *迭代器,它从第一个元素开始。不要这样做。调用'iterator()'一次并将迭代器存储在一个变量中。 – Jesper

+0

如果您不想将迭代器分配给临时变量,则可以尝试保留一个计数变量并在计数完成后终止循环。 – CodeHunter

回答

0

.iterator()从第一个元素返回新的迭代器。将迭代器放入一个变量中。

Iterator itr = pOn[j].iterator(); 
while (itr.hasNext()) { 
    stats.decrement(getNodeCase((int) (pOn[j].iterator().next()), hidden, o)); 
    itr.next(); 
} 
0

你正在从你的问题得出错误的结论。你说你有8个类似的块,因此你不想使用局部变量。

虽然这已经导致您编写不正确的错误代码。

你看 - 问题不是该迭代器的附加变量。事实上,你已经拥有了8个街区。

所以这里的答案:退一步,确定您的代码共用部位,创造有益的抽象(可能是一些小的辅助方法),以消除重复代码不同于8块到来。你会发现,当你找到一种方法来隐藏辅助方法中的循环时 - 你是否真的更关心用于该迭代器的变量?