Функция generateSequence
Функция generateSequence создает последовательность
элементов типа Sequence. Она может генерировать
элементы бесконечно или до тех пор, пока функция-генератор
не вернет null. Существует два основных варианта
функции: с начальным значением и функцией-продолжением,
либо только с функцией-генератором.
Импорт
import kotlin.sequences.generateSequence
Синтаксис
fun <T : Any> generateSequence(
seed: T?,
nextFunction: (T) -> T?
): Sequence<T>
fun <T : Any> generateSequence(
nextFunction: () -> T?
): Sequence<T>
fun <T : Any> generateSequence(
seedFunction: () -> T?
): Sequence<T>
Пример
Создадим последовательность чисел от 1 до 5:
val sequence = generateSequence(1) { it + 1 }
.takeWhile { it <= 5 }
val res = sequence.toList()
println(res)
Результат выполнения кода:
List<Int> [1, 2, 3, 4, 5]
Пример
Создадим последовательность четных чисел:
val sequence = generateSequence(0) { it + 2 }
.take(5)
val res = sequence.toList()
println(res)
Результат выполнения кода:
List<Int> [0, 2, 4, 6, 8]
Пример
Создадим последовательность с помощью функции-генератора:
var count = 0
val sequence = generateSequence {
count++
if (count <= 3) "Item $count" else null
}
val res = sequence.toList()
println(res)
Результат выполнения кода:
List<String> ['Item 1', 'Item 2', 'Item 3']
Пример
Создадим последовательность символов:
val sequence = generateSequence('a') {
if (it < 'e') (it + 1).toChar() else null
}
val res = sequence.toList()
println(res)
Результат выполнения кода:
List<Char> ['a', 'b', 'c', 'd', 'e']
Пример
Бесконечная последовательность с ограничением:
val infiniteSequence = generateSequence(1) { it * 2 }
val limited = infiniteSequence.take(6)
val res = limited.toList()
println(res)
Результат выполнения кода:
List<Int> [1, 2, 4, 8, 16, 32]
Смотрите также
-
функцию
sequenceOf,
которая создает последовательность из фиксированного набора элементов -
функцию
emptySequence,
которая создает пустую последовательность -
функцию
listOf,
которая создает неизменяемый список элементов -
функцию
arrayOf,
которая создает массив элементов