Java迭代器/Iterator
需求:首先需要统计迭代器中元素的个数。如果元素个数超过某个临界值(比如为3),然后需要对每个元素做处理。不超过3则不作任何处理!
直接上我的代码:
Iterator it = DocumentHelper.parseText(response).getRootElement().
element("member").elementIterator("key");
Int Num = 0;
While(it.hasnext())
{
Num++;
}
if(Num>3)
{
While(it.hasnext())
{
dosth....
}
}
else{}
这样会while死循环,Num一直加。
经过Debug查出原因是hasNext只是判断有没有下一个,而游标不会后移,一直停在第一个元素的位置。所以导致死循环。
于是,修改代码成下面这样:
Iterator it = DocumentHelper.parseText(response).getRootElement().
element("member").elementIterator("key");
Int Num = 0;
while(iterator.hasNext()){
Num++;
iterator.next();
}
if(Num>3)
{
While(it.hasnext())
{
dosth....
}
}
else{}
这样修改后,遍历没有问题,成功得到Num值。
当Num大于3,执行后面代码时,又出现新的问题:游标已经停在最后,并没有自动归0,所以导致if条件语句中的while循环直接跳出。
再次修改:
Iterator it = DocumentHelper.parseText(response).getRootElement().
element("member").elementIterator("key");
// 复制迭代器
Iterator it2 = it;
Int Num = 0;
while(iterator.hasNext()){
Num++;
iterator.next();
}
if(Num>3)
{
While(it2.hasnext())
{
dosth....
}
}
else{}
结果失败,证明这样的复制是不行的。
继续修改:
Iterator it = DocumentHelper.parseText(response).getRootElement().
element("member").elementIterator("key");
//重新获得迭代器
Iterator it2 = DocumentHelper.parseText(response).getRootElement().
element("member").elementIterator("key");
Int Num = 0;
while(iterator.hasNext()){
Num++;
iterator.next();
}
if(Num>3)
{
While(it2.hasnext())
{
dosth....
}
}
else{}
这样修改是成功了,但是又重新获取了一个迭代器,感觉很笨。
有没有一种方法可以使遍历后游标又直接回到第一个元素的位置?还有待研究。
2016/03/04 15:53:56