我正在尝试在递归方法中使用迭代器。如果列表中没有剩下的下一个元素,它应该退出该方法。但是如果光标位于最后位置,则iterator.hasNext()
的检查会返回true
,除了false
之外我还没有?
任何想法和提示?
我不是要张贴图片所以我会把它写下来。这就是我在Eclipse-Debugger-View中看到的:
iterator | AbstractList$Itr (id=448)
- cursor | 2
- excpectedModCount | 2
- lastRet | 1
- this$0 | ArrayList<E> (id=438)
- elemtData | Object[10] (id=462)
---modCount | 2
---size | 2
这是代码
static void resolveWithIterator(List<SomethingContext> list, Iterator<ContextResolveHelper> iterator, List<ContextResolveHelper> resolverList)
{
boolean end = resolverList.iterator().hasNext();
if (list.size() == 1 || !end){
resolvedList.add(list);
return;
}else{
ContextResolveHelper acutalEntry = iterator.next();
List<SomethingContext> tempQRes2 = new ArrayList<SomethingContext>();
for (SomethingContext smtCtx : list){
if (//check various things){
tempQRes2.add(smtCtx);
}
}
resolveWithIterator(tempQRes2, iterator, resolverList);
}
}
答案 0 :(得分:2)
我认为问题在于逻辑本身,正如你所写的那样,你用以下函数调用函数:
Iterator<ContextResolveHelper> iterator = resolverList.iterator();
resolveWithIterator(searchCtxResult, iterator, resolverList);
但是,在方法本身你做两件事,你在新的迭代器上检查,而不是提供的那个
boolean end = resolverList.iterator().hasNext();
,如果至少有一个元素,它将返回true。
调用iterator()总是返回新的迭代器,你应该使用参数中提供的迭代器。
答案 1 :(得分:1)
我看到的唯一hasNext()
是resolverList.iterator().hasNext()
。由于每次都有一个新的迭代器,当然它总是有一个“下一个”,除非列表本身是空的。