Интерфейс Iterator

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

Импорт

kotlinimport kotlin.collections.Iterator

Синтаксис

kotlininterface Iterator<T>

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

kotlinfun hasNext(): Boolean
kotlinfun next(): T

Пример

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

kotlinval numbers = listOf(1, 2, 3, 4, 5)
val iterator = numbers.iterator()

while (iterator.hasNext()) {
  val element = iterator.next()
  println(element)
}

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

kotlinInt 1
Int 2
Int 3
Int 4
Int 5

Пример

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

kotlinval chars = arrayOf('a', 'b', 'c', 'd', 'e')
val iterator = chars.iterator()

while (iterator.hasNext()) {
  val element = iterator.next()
  println(element)
}

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

kotlinChar a
Char b
Char c
Char d
Char e

Пример

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

kotlinval numbers = listOf(1, 2)
val iterator = numbers.iterator()

println(iterator.next())
println(iterator.next())
println(iterator.next()) // Exception

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

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

Пример

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

kotlinval 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)

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

kotlin[1, 3, 5]

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

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