Итератор удаляет первый элемент, который вызывает исключение IndexOutOfBoundsException - PullRequest
0 голосов
/ 16 мая 2019

В основном, есть данные ответа, которые необходимо отфильтровать. Данные ответа состоят из ListTrasporter, который содержит ListClass. Он зацикливает каждый ListTransporter и для каждого ListTransporter, который имеет пустой ListClass - этот элемент 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 голосов
/ 16 мая 2019

Похоже, ваш цикл удаляет все элементы вашей коллекции. Вам нужно защитить свой код, который пытается проиндексировать коллекцию, проверяя его размер следующим образом:

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

Вы можете проверить и firstItem, и secondItem в одной и той же проверке, если это имеет смысл для вашей логики.

...