Spec-Zone.ru › Kotlin 1.6

generateSequence

kotlin-stdlib / kotlin.sequences / generateSequence
Требования к платформе и версии: JVM (1.0), JS (1.0), Native (1.0)
fun <T : Any> generateSequence(
    nextFunction: () -> T?
): Sequence<T>

Возвращает последовательность, которая вызывает функцию для вычисления следующего значения на каждой итерации до тех пор, пока функция не вернёт null.

Возвращаемая последовательность ограничена и может быть проитерирована только один раз.

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
var count = 3

val sequence = generateSequence {
    (count--).takeIf { it > 0 } // will return null, when value becomes non-positive,
                                // and that will terminate the sequence
}

println(sequence.toList()) // [3, 2, 1]

// sequence.forEach {  }  // <- iterating that sequence second time will fail
//sampleEnd
}

См. также

constrainOnce

kotlin.sequences.sequence

Требования к платформе и версии: JVM (1.0), JS (1.0), Native (1.0)
fun <T : Any> generateSequence(
    seed: T?, 
    nextFunction: (T) -> T?
): Sequence<T>

Возвращает последовательность, определяемую начальным значением seed и функцией nextFunction, которая вызывается для вычисления следующего значения на основе предыдущего на каждой итерации.

Последовательность генерирует значения до тех пор, пока не встретит первое null значение. Если seed равно null, генерируется пустая последовательность.

Последовательность может быть итерирована несколько раз, каждый раз начиная с seed.

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
fun fibonacci(): Sequence<Int> {
    // fibonacci terms
    // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, ...
    return generateSequence(Pair(0, 1), { Pair(it.second, it.first + it.second) }).map { it.first }
}

println(fibonacci().take(10).toList()) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
//sampleEnd
}

См. также

kotlin.sequences.sequence

Требования к платформе и версии: JVM (1.0), JS (1.0), Native (1.0)
fun <T : Any> generateSequence(
    seedFunction: () -> T?, 
    nextFunction: (T) -> T?
): Sequence<T>

Возвращает последовательность, определяемую функцией seedFunction, которая вызывается для получения начального значения, и nextFunction, которая вызывается для вычисления следующего значения на основе предыдущего на каждой итерации.

Последовательность генерирует значения до тех пор, пока не встретит первое null значение. Если seedFunction возвращает null, генерируется пустая последовательность.

Последовательность может быть итерирована несколько раз.

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
class LinkedValue<T>(val value: T, val next: LinkedValue<T>? = null)

fun <T> LinkedValue<T>?.asSequence(): Sequence<LinkedValue<T>> = generateSequence(
    seedFunction = { this },
    nextFunction = { it.next }
)

fun <T> LinkedValue<T>?.valueSequence(): Sequence<T> = asSequence().map { it.value }

val singleItem = LinkedValue(42)
val twoItems = LinkedValue(24, singleItem)

println(twoItems.valueSequence().toList()) // [24, 42]
println(singleItem.valueSequence().toList()) // [42]
println(singleItem.next.valueSequence().toList()) // []
//sampleEnd
}

См. также

kotlin.sequences.sequence

© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/generate-sequence.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API