Home > Mobile >  How to create a custom iterator in kotlin and add to existing class?
How to create a custom iterator in kotlin and add to existing class?

Time:09-10

Hello I am trying to add a custom iterator for example to a Pair class from kotlin package to be able to use instance of that class in a for loop

Let's assume this is what I want to be able to do:

val pair: Pair<Int, String> = Pair(1, "sample data")
for (element in pair) {
println(element)
}

I know that there are plenty other ways to print elements from a pair but I specifically want to be able to use pair in a for loop and I need to add iterator() object with next() and hasNext() methods implementation to Pair class

CodePudding user response:

You can do this by providing the iterator() operator for your object, either as a member function or extension function. Example using an extension function:

fun main() {
    val pair: Pair<Int, String> = Pair(1, "sample data")
    for (element in pair) {
        println(element)
    }
}

operator fun <T> Pair<T, T>.iterator(): Iterator<T> = listOf(first, second).iterator()

However, you need to be aware that this way you partially lose strongly typing. element can only be a common supertype of all elements, in most cases simply Any?.

You can read more about this in the official documentation: https://kotlinlang.org/docs/control-flow.html#for-loops

  • Related