【问题标题】:Iterator deletes first element which causes IndexOutOfBoundsException迭代器删除导致 IndexOutOfBoundsException 的第一个元素
【发布时间】:2019-05-16 02:11:32
【问题描述】:

基本上,有需要过滤的响应数据。响应数据由包含 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);

它调用了第一个元素,但是第一个元素是空的。有没有办法解决这个错误。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • firstItem.getListTransporter() - 先检查是否为空?
  • 为什么您会惊讶于循环可能会删除列表中的所有项目,从而使列表为空,从而使get(0) 失败?

标签: java iterator


【解决方案1】:

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

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

如果这对您的逻辑有意义,您可以同时检查 firstItemsecondItem

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2014-08-28
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多