НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
173 of 1310 menu

Интерфейс Iterator

Интерфейс Iterator предоставляет стандартный способ последовательного доступа к элементам коллекции без раскрытия её внутренней структуры. Он содержит методы для проверки наличия следующего элемента и получения текущего элемента.

Импорт

import kotlin.collections.Iterator

Синтаксис

interface Iterator<T>

Методы интерфейса

fun hasNext(): Boolean
fun next(): T

Пример

Создадим итератор для списка чисел и переберем его элементы:

val numbers = listOf(1, 2, 3, 4, 5) val iterator = numbers.iterator() while (iterator.hasNext()) { val element = iterator.next() println(element) }

Результат выполнения кода:

Int 1 Int 2 Int 3 Int 4 Int 5

Пример

Использование итератора для массива символов:

val chars = arrayOf('a', 'b', 'c', 'd', 'e') val iterator = chars.iterator() while (iterator.hasNext()) { val element = iterator.next() println(element) }

Результат выполнения кода:

Char a Char b Char c Char d Char e

Пример

Попытка вызвать next когда элементов больше нет, вызывает исключение NoSuchElementException:

val numbers = listOf(1, 2) val iterator = numbers.iterator() println(iterator.next()) println(iterator.next()) println(iterator.next()) // Exception

Результат выполнения кода:

Int 1 Int 2 Exception in thread "main" java.util.NoSuchElementException

Пример

Итераторы также поддерживаются для MutableList и позволяют удалять элементы во время итерации:

val numbers = mutableListOf(1, 2, 3, 4, 5) val iterator = numbers.iterator() while (iterator.hasNext()) { val element = iterator.next() if (element % 2 == 0) { iterator.remove() } } println(numbers)

Результат выполнения кода:

[1, 3, 5]

Смотрите также

  • интерфейс Iterable,
    который представляет коллекцию, поддерживающую итерацию
  • интерфейс ListIterator,
    который предоставляет двунаправленную итерацию по спискам
  • интерфейс MutableIterator,
    который добавляет возможность удаления элементов во время итерации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить