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

标签 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);

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

最佳答案

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

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

如果对您的逻辑有意义,您可以在同一次检查中同时检查 firstItemsecondItem

关于java - 迭代器删除导致 IndexOutOfBoundsException 的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159862/

相关文章:

c++ - std::find_if_not() 返回什么类型?

c++ - std::find() 在 C 风格数组上倒退?

Java 无法停止 Process Builder 线程

java - TreeSet 查找书中 k 个最常见的单词?

java - 遍历二维 Java 数组

JAVA - 从迭代列表中删除非迭代器元素

java - GWT 简单 DockPanel 使用错误

Java克隆方法未按预期工作(极小极大算法案例)

java - 标准 MBean 的描述

json - 在 Scala 中扫描一个巨大的 JSON 文件以获取可反序列化的数据