Функция generateSequence

Функция generateSequence создает последовательность элементов типа Sequence. Она может генерировать элементы бесконечно или до тех пор, пока функция-генератор не вернет null. Существует два основных варианта функции: с начальным значением и функцией-продолжением, либо только с функцией-генератором.

Импорт

kotlinimport kotlin.sequences.generateSequence

Синтаксис

kotlinfun <T : Any> generateSequence(
  seed: T?, 
  nextFunction: (T) -> T?
): Sequence<T>
kotlinfun <T : Any> generateSequence(
  nextFunction: () -> T?
): Sequence<T>
kotlinfun <T : Any> generateSequence(
  seedFunction: () -> T?
): Sequence<T>

Пример

Создадим последовательность чисел от 1 до 5:

kotlinval sequence = generateSequence(1) { it + 1 }
  .takeWhile { it <= 5 }

val res = sequence.toList()
println(res)

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

kotlinList<Int> [1, 2, 3, 4, 5]

Пример

Создадим последовательность четных чисел:

kotlinval sequence = generateSequence(0) { it + 2 }
  .take(5)

val res = sequence.toList()
println(res)

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

kotlinList<Int> [0, 2, 4, 6, 8]

Пример

Создадим последовательность с помощью функции-генератора:

kotlinvar count = 0
val sequence = generateSequence {
  count++
  if (count <= 3) "Item $count" else null
}

val res = sequence.toList()
println(res)

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

kotlinList<String> ['Item 1', 'Item 2', 'Item 3']

Пример

Создадим последовательность символов:

kotlinval sequence = generateSequence('a') { 
  if (it < 'e') (it + 1).toChar() else null 
}

val res = sequence.toList()
println(res)

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

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

Пример

Бесконечная последовательность с ограничением:

kotlinval infiniteSequence = generateSequence(1) { it * 2 }
val limited = infiniteSequence.take(6)

val res = limited.toList()
println(res)

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

kotlinList<Int> [1, 2, 4, 8, 16, 32]

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

  • функцию sequenceOf,
    которая создает последовательность из фиксированного набора элементов
  • функцию emptySequence,
    которая создает пустую последовательность
  • функцию listOf,
    которая создает неизменяемый список элементов
  • функцию arrayOf,
    которая создает массив элементов