Spec-Zone.ru › Kotlin 2

sequence

kotlin-stdlib/kotlin.sequences/sequence

Начиная с Kotlin: 1.3

fun <T> sequence(block: suspend SequenceScope<T>.() -> Unit): Sequence<T>

Лениво создаёт Sequence, выдавая значения по одному.

Если потребляющий код прекращает перебор последовательности до её завершения, оставшаяся часть вычисления вообще не будет выполнена. В частности, это означает, что блоки finally могут остаться невыполненными:

val sequenceOfOne = sequence {
try {
yield(1)
// no code after the `yield(1)` line will be executed!
} finally {
println("This line will not run")
}
}
// only get the first element, do not attempt evaluating the rest of them
println(sequenceOfOne.first())

См. также

generateSequence

Примеры

import kotlin.test.*

fun main() { 
   //sampleStart 
   val sequence = sequence {
    val start = 0
    // yielding a single value
    yield(start)
    // yielding an iterable
    yieldAll(1..5 step 2)
    // yielding an infinite sequence
    yieldAll(generateSequence(8) { it * 3 })
}

println(sequence.take(7).toList()) // [0, 1, 3, 5, 8, 24, 72] 
   //sampleEnd
}
import kotlin.test.*

fun main() { 
   //sampleStart 
   fun fibonacci() = sequence {
    var terms = Pair(0, 1)

    // this sequence is infinite
    while (true) {
        yield(terms.first)
        terms = Pair(terms.second, terms.first + terms.second)
    }
}

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

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

Spec-Zone.ru

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