Получение индекса элемента в цикле foreach в Java: решение
Быстрый ответ
int idx = 0;
for (YourType item : yourCollection) {
    // idx — это текущий индекс, ваше "счастливое" число.
    idx++; // После прохода каждого элемента увеличиваем "счастливое" число.
}
Для управления индексом используйте idx, интегрированный в цикл for-each. Увеличивайте idx после обработки каждого элемента, чтобы он соответствовал порядковому номеру элемента в коллекции.

Подробный разбор: различные способы отслеживания индекса
Приведенное выше простое решение идеально подходит для легких задач. Однако когда задачи усложняются, могут потребоваться более продвинутые методы. Давайте подробнее рассмотрим некоторые из них:
Отслеживание производительности
Если вам важна производительность, для работы с индексами используйте метод size() у коллекций или свойство length у массивов:
for (int i = 0; i < yourArray.length; i++) {
    YourType item = yourArray[i];
    // Теперь у вас есть контроль над индексом i.
}
Создание собственного итератора
Если вы предпочитаете удобство циклов for-each и при этом хотите следить за индексами, создание пользовательского итератора может стать хорошим решением:
public class IterableWithIndex<T> implements Iterable<Pair<Integer, T>> {
    private final List<T> list;
    public IterableWithIndex(List<T> list) {
        this.list = list;
    }
    @Override
    public Iterator<Pair<Integer, T>> iterator() {
        return new Iterator<Pair<Integer, T>>() {
            private int index = 0;
            @Override
            public boolean hasNext() {
                return index < list.size(); // Ещё есть элементы для прохода?
            }
            @Override
            public Pair<Integer, T> next() {
                // Возвращаем пары, состоящие из элементов и индексов.
                return Pair.of(index++, list.get(index – 1));
            }
        };
    }
}
Этот подход поможет элегантно соотнести элементы коллекции и их индексы.
Использование функционального стиля в Java 8
С появлением IntStream в Java 8 появилась возможность итерации по диапазону индексов. Это отлично совмещается с коллекциями:
IntStream.range(0, yourList.size())
         .forEach(idx -> {
             YourType item = yourList.get(idx);
             // Меньше переменных — меньше шансов допустить ошибку.
         });
Такой подход упрощает чтение кода и избавляет от необходимости использования дополнительной переменной для индекса.
Визуализация
Рассмотрим, как можно отслеживать индекс, пройдя по коллекции в цикле for-each:
Коллекция (📦): [🍎, 🍋, 🍇, 🍓]
Пусть у нас будет такая мини-игра: определяем индекс каждого элемента:
int currentIndex = 0;
for (Object item : collection) {
    System.out.println("Элемент " + item.toString() + " расположен под индексом " + currentIndex);
    currentIndex++; // Переходим к следующему элементу, чтобы выяснить его индекс.
}
Используя счетчик (currentIndex), мы отслеживаем позицию каждого элемента:
Индексы (🔢): 0, 1, 2, 3
Элементы: 🍎(0), 🍋(1), 🍇(2), 🍓(3)
Выбор альтернативных типов коллекций
Коллекции в Java, такие как ArrayList и LinkedList, изначально сохраняют порядок элементов. Используя метод List.indexOf(Object o), можно определить индекс элемента после его извлечения из коллекции.
Переосмысление вашей стратегии
Если вам необходимы индексы в цикле for-each, стоит пересмотреть использованный вами алгоритм. Возможно, существует другой подход, который сделает ваше решение более очевидным и эффективным, уменьшив зависимость от индексов.
Обход возможных подводных камней
Будьте осторожны: изменение коллекций в процессе итерации может привести к возникновению исключений, и отдельные переменные для индексов могут запутать. Особо внимательными нужно быть при инкрементации индекса.
Полезные материалы
- Цикл "for each" в Java – GeeksforGeeks — Подробное руководство по работе с циклом "for each" в Java.
 - Цикл "for each" – Oracle Docs — Основной источник знаний, официальная документация, по циклу "for each".
 - Учебник | DigitalOcean — Исчерпывающий учебник от DigitalOcean о функционировании циклов "for each".
 - Итерирование по коллекциям в Java 8 — Советы и техники итерирования по коллекциям с использованием новых возможностей Java 8.
 - DZone – Итерирование по коллекциям в Java — Методы для эффективного итерирования по коллекциям в Java.
 


