Spec-Zone.ru › Kotlin 2

iterator

kotlin-stdlib/kotlin.sequences/iterator

Начиная с Kotlin: 1.3

fun <T> iterator(block: suspend SequenceScope<T>.() -> Unit): Iterator<T>

Создаёт Iterator, лениво выдающий значения по одному.

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

val singleElementIterator = iterator {
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
if (singleElementIterator.hasNext()) {
println(singleElementIterator.next())
}

Примеры

import kotlin.test.*

fun main() { 
   //sampleStart 
   val collection = listOf(1, 2, 3)
val wrappedCollection = object : AbstractCollection<Any>() {
    override val size: Int = collection.size + 2

    override fun iterator(): Iterator<Any> = iterator {
        yield("first")
        yieldAll(collection)
        yield("last")
    }
}

println(wrappedCollection) // [first, 1, 2, 3, last] 
   //sampleEnd
}

fun main() { 
   //sampleStart 
   val iterable = Iterable {
    iterator {
        yield(42)
        yieldAll(1..5 step 2)
    }
}
val result = iterable.mapIndexed { index, value -> "$index: $value" }
println(result) // [0: 42, 1: 1, 2: 3, 3: 5]

// can be iterated many times
repeat(2) {
    val sum = iterable.sum()
    println(sum) // 51
} 
   //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/iterator.html

Spec-Zone.ru

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