Интерфейс 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,
который добавляет возможность удаления элементов во время итерации