Java迭代器

Java迭代器Iterator

Posted by Saylst on March 4, 2016

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