如果在 while(iterator.hasNext())期间发生异常,如何继续迭代循环?
所以我想做下面的事情。
try {
loop: while (iterator.hasNext()) // as excetion is on this line excetion will be catch by catch_2
{
try {
Result res = (Result) iterator.next();
list.add(res);
} catch (Exception e) { // catch_1
e.printStackTrace();
}
}
} catch (Exception e) { // catch_2
// goto start of the loop
continue loop;
}
Iterator<UserProvisioning> iterator = beans.iterator();
while (iterator.hasNext()) {
try {
UserProvisioning userProvisioning = (UserProvisioning) iterator.next();
System.out.println(userProvisioning.getFIRST_NAME());
list.add(userProvisioning);
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error("Error occured...)
}
}
根据我的理解,iterator.hasNext()尝试通过将csv记录列映射到POJO字段来检查下一个元素是否存在,并且由于csv记录标题中的无效数据计数与记录文件不匹配,因此出错>
java.lang.RuntimeException: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Number of data fields does not match number of headers.
所以我正在尝试记录错误并继续迭代下一条记录。
编辑
iterator.hasNext()
应该返回true或false,但是其抛出错误
答案 0 :(得分:0)
如果将try-catch块放入循环中,除非您退出循环,否则它将继续循环到最后
for(Iterator<UserProvisioning> iter = beans.iterator(); iter.hasNext();) {
try{
UserProvisioning userProvisioning = iter.next();
System.out.println(userProvisioning.getFIRST_NAME());
list.add(userProvisioning);
} catch(Exception ex) {
logger.warn("An issue occurred when looping through user provisionings: " + ex.getMessage());
}
}
上面的代码将设置一个迭代器并循环遍历。如果发生异常,由于没有调用break
,因此它将记录并继续循环。
另外,由于您知道了迭代器的类型,因此在调用iter.next()