Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Iterable

Интерфейс всего, что можно обойти циклом for-each.

Доступно с: Java 1.5

Синтаксис

public interface Iterable<T> {
    Iterator<T> iterator();
    default void forEach(Consumer<? super T> action);
}

Примеры

Цикл for-each и метод forEach():

void main() {
    List<String> langs = List.of("Java", "Kotlin", "Scala");
    for (String lang : langs) {
        IO.println(lang);
    }
    langs.forEach(lang -> IO.println(lang.length()));
}

Результат:

Java
Kotlin
Scala
4
6
5

Свой класс в цикле for-each:

record Countdown(int from) implements Iterable<Integer> {
    public Iterator<Integer> iterator() {
        return new Iterator<>() {
            int current = from;
            public boolean hasNext() { return current > 0; }
            public Integer next() { return current--; }
        };
    }
}
 
void main() {
    for (int n : new Countdown(3)) {
        IO.println(n);
    }
}

Результат:

3
2
1

Примечания

Цикл for (T x : collection) работает с массивами и с любым объектом Iterable: всеми коллекциями, кроме Map (у словаря обходят entrySet(), keySet() или values()). Удалять элементы коллекции внутри такого цикла нельзя — будет ConcurrentModificationException; используйте removeIf() или Iterator.remove().

См. также

  • Iterator — Объект, который по одному выдаёт элементы коллекции.
  • Map.forEach() — Выполняет действие для каждой пары словаря.
  • Stream.forEach() — Выполняет действие для каждого элемента потока (завершающая операция).

Вопросы и ответы по теме

В учебнике

  • Обход коллекций — Как перебрать коллекцию в Java: цикл for-each, индексы, forEach с лямбдой, обход словаря, Iterator и removeIf.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.