Java匿名迭代器?

Java匿名迭代器?,java,iterator,anonymous,Java,Iterator,Anonymous,我有以下Java代码: while (pOn[j].iterator().hasNext()) { stats.decrement(getNodeCase((int) (pOn[j].iterator().next()), hidden, o)); } 目前,它没有终止。我怀疑这是因为pOn[j].iterator()每次都返回一个新的迭代器。有没有办法解决这个问题,而不将迭代器分配给临时变量?谢谢 编辑:我无意中包括了这一行,它不应该在那里。 pOn[j].迭代器().next()。从那

我有以下Java代码:

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

编辑:我无意中包括了这一行,它不应该在那里。
pOn[j].迭代器().next()。从那以后我就把它拿走了

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

Iterator itr = pOn[j].iterator();
while (itr.hasNext()) {
  stats.decrement(getNodeCase((int) (pOn[j].iterator().next()), hidden, o));
  itr.next();
}
.iterator()
正在从第一个元素返回新的迭代器。将迭代器放入变量中

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

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

尽管这已经导致您编写了错误的错误代码

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


因此,这里的答案是:退一步,确定代码中的公共部分,并创建有用的抽象(可能是一些小的辅助方法),以消除来自这8个块的代码重复。你看,当你找到一种在助手方法中隐藏循环的方法时,你真的会关心迭代器使用的变量吗

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

尽管这已经导致您编写了错误的错误代码

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


因此,这里的答案是:退一步,确定代码中的公共部分,并创建有用的抽象(可能是一些小的辅助方法),以消除来自这8个块的代码重复。你看,当你找到一种在助手方法中隐藏循环的方法时,你真的会关心迭代器使用的变量吗

每次调用
iterator()
,都会创建一个新的迭代器,它从第一个元素开始。不要那样做。调用
iterator()
一次,并将迭代器存储在一个变量中。为什么不使用满足您需要的
增强for
(通常称为foreach)呢?让我向您介绍一些魔法:
for(Node-Node:pOn[j]){…对Node做点什么…}
用增强的for循环替换此代码与将迭代器分配给临时变量不同。迭代器将在每个循环迭代中执行两步,因为next在循环中被调用两次。@john代码不工作不是更乏味吗?另外,反复编写
pOn[j].iterator()
不是很乏味吗?每次调用
iterator()
,都是在创建一个新的迭代器,它从第一个元素开始。不要那样做。调用
iterator()
一次,并将迭代器存储在一个变量中。为什么不使用满足您需要的
增强for
(通常称为foreach)呢?让我向您介绍一些魔法:
for(Node-Node:pOn[j]){…对Node做点什么…}
用增强的for循环替换此代码与将迭代器分配给临时变量不同。迭代器将在每个循环迭代中执行两步,因为next在循环中被调用两次。@john代码不工作不是更乏味吗?另外,反复编写
pOn[j].iterator()
不是很乏味吗?