Для тех, кто думает, что это массив, это скорее список.
Позвольте мне предположить, что вы раньше получали ConcurrentModificationExceptions, поэтому вы переписали цикл, чтобы использовать индексированный поиск элементов (избегая итератора). Поздравляем, вы исправили исключение, но не проблему.
Вы изменяете свой Список во время работы этого цикла. Время от времени вы удаляете элемент. Время от времени вы смотрите на последний элемент size()-1
. Когда порядок операций выглядит так:
(some thread)
remove an element from response.getSegments().getSegmentInfo()
(some possibly other thread)
lookup up the size()-1 element of the above
Вы получаете доступ к элементу, который больше не существует, и вызовет исключение IndexOutOfBoundsException.
Вам необходимо исправить логику этого списка, контролируя доступ к нему таким образом, чтобы, если вам нужно проверить все элементы, вы не предполагали, что список будет таким же, как он пересекает все элементы, или (гораздо лучшее решение ) заморозить список для цикла.
Простой способ сделать последнее - сделать копию списка (но не элементов списка) и выполнить итерацию по копии.
--- Отредактировано, поскольку проблема резко изменилась в редактировании после написания вышеупомянутого ---
Вы добавили много дополнительного кода, включая несколько дополнительных поисков по списку. Вы используете один и тот же индекс для всех поисков по спискам, но ничто не указывает на то, что все списки имеют одинаковый размер.
Кроме того, вы, вероятно, не хотите пропускать элементы, скорее всего, вы действительно хотите получить доступ ко всем классам кабины в сегментеInfo, а не только к 3-му классу Cabin в 3-м сегменте информации и т. Д.