Интерфейс MutableIterator

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

Импорт

kotlinimport kotlin.collections.MutableIterator

Синтаксис

kotlininterface MutableIterator<T> : Iterator<T> {
  fun remove()
}

Пример

Удаление элементов из изменяемого списка с помощью итератора:

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]

Пример

Удаление строк из изменяемого множества:

kotlinval words = mutableSetOf("apple", "banana", "cherry", "date")
val iterator = words.iterator()

while (iterator.hasNext()) {
  val word = iterator.next()
  if (word.length > 5) {
    iterator.remove()
  }
}

println(words)

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

kotlin[apple, date]

Пример

Использование цикла for с проверкой условия для удаления элементов:

kotlinval numbers = mutableListOf(10, 15, 20, 25, 30)
val iterator = numbers.listIterator()

for (element in iterator) {
  if (element < 20) {
    iterator.remove()
  }
}

println(numbers)

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

kotlin[20, 25, 30]

Пример

Удаление всех элементов из коллекции с помощью итератора:

kotlinval items = mutableListOf('a', 'b', 'c', 'd', 'e')
val iterator = items.iterator()

while (iterator.hasNext()) {
  iterator.next()
  iterator.remove()
}

println(items)

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

kotlin[]

Важные замечания

Метод remove можно вызывать только после успешного вызова метода next. Попытка вызвать remove без предварительного вызова next приведет к исключению IllegalStateException.

kotlinval numbers = mutableListOf(1, 2, 3)
val iterator = numbers.iterator()

try {
  iterator.remove()
} catch (e: IllegalStateException) {
  println("Error: ${e.message}")
}

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

kotlinError: The next() method has not yet been called, or the remove() method has already been called after the last call to the next() method

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

  • интерфейс Iterator,
    базовый интерфейс для итераторов
  • интерфейс MutableCollection,
    изменяемая коллекция элементов
  • интерфейс ListIterator,
    итератор для списков с двунаправленным обходом
  • интерфейс MutableListIterator,
    изменяемый итератор для списков