iterator

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

Builds an Iterator lazily yielding values one by one.

Since Kotlin

1.3

Samples

import samples.*
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")
    }
}

assertPrints(wrappedCollection, "[first, 1, 2, 3, last]") 
   //sampleEnd
}
import samples.*
fun main() { 
   //sampleStart 
   val iterable = Iterable {
    iterator {
        yield(42)
        yieldAll(1..5 step 2)
    }
}
val result = iterable.mapIndexed { index, value -> "$index: $value" }
assertPrints(result, "[0: 42, 1: 1, 2: 3, 3: 5]")

// can be iterated many times
repeat(2) {
    val sum = iterable.sum()
    assertPrints(sum, "51")
} 
   //sampleEnd
}