Интерфейс MutableIterable

Интерфейс MutableIterable наследуется от Iterable и представляет коллекцию элементов, которая поддерживает итерацию с возможностью удаления элементов во время прохождения по коллекции. Основное отличие от Iterable - наличие метода iterator(), который возвращает MutableIterator вместо обычного Iterator.

Импорт

kotlinimport kotlin.collections.MutableIterable

Синтаксис

kotlininterface MutableIterable<out T> : Iterable<T>

Пример

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

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

while (iterator.hasNext()) {
  val number = iterator.next()
  if (number % 2 == 0) {
    iterator.remove()
  }
}

println(numbers)

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

kotlinList<Int> [1, 3, 5]

Пример

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

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

for (letter in iter) {
  if (letter == 'c' || letter == 'e') {
    iter.remove()
  }
}

println(letters)

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

kotlinList<Char> ['a', 'b', 'd']

Пример

Демонстрация работы с MutableIterable для массива символов:

kotlinval chars = arrayOf('x', 'y', 'z').toMutableList()
val mutableIter = chars.iterator()

while (mutableIter.hasNext()) {
  val current = mutableIter.next()
  if (current == 'y') {
    mutableIter.remove()
  }
}

println(chars)

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

kotlinList<Char> ['x', 'z']

Методы

kotlinabstract fun iterator(): MutableIterator<T>

Примечания

Важно помнить, что метод remove() можно вызывать только после вызова next(). Попытка вызвать remove() без предварительного вызова next() приведет к исключению IllegalStateException.

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

iter.remove() // IllegalStateException

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

  • интерфейс Iterable,
    который представляет базовую функциональность для итерации
  • интерфейс MutableIterator,
    который предоставляет методы для изменения коллекции во время итерации
  • интерфейс MutableCollection,
    который расширяет MutableIterable и добавляет методы для изменения коллекции
  • интерфейс List,
    который представляет упорядоченную коллекцию элементов