迭代器删除导致IndexOutOfBoundsException的第一个元素

时间:2019-05-16 02:11:32

标签: java iterator

基本上,有一些响应数据需要过滤。响应数据由包含ListClass的ListTrasporter组成。它循环每个ListTransporter和每个具有空ListClass的ListTransporter-ListTransporter元素被删除。我使用了迭代器来执行此操作,这是代码:

Iterator<Transporter> iterator = item.getListTransporter().iterator();
while (iterator.hasNext()) {
    Transporter trans = iterator.next();
    List<TransporterClass> responseType = trans.getListClass();
    if (responseType.isEmpty() || responseType.size() == 0) {
            iterator.remove();
    }
}

现在的问题是,当第一个元素包含要过滤和删除的数据时,由于以下几行代码,它导致了IndexOutOfBoundsException错误:

Transporter firstItemTransporter = firstItem.getListTransporter().get(0);
Transporter secondItemTransporter = secondItem.getListTransporter().get(0);

它调用第一个元素,但是第一个元素为空。有没有办法解决这个错误。谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

听起来您的循环正在删除集合中的所有元素。您需要通过检查其大小来保护尝试索引到集合中的代码,如下所示:

if (!firstItem.getListTransporter().isEmpty()) {
     Transporter firstItemTransporter = firstItem.getListTransporter().get(0);
     ...
} else {
     // Handle there not being any data as you would expect.
}

如果您的逻辑合理,则可以同时检查firstItemsecondItem