Black Friday 2025 – NPI EA (cat = Baeldung on Kotlin)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Baeldung Pro – Kotlin – NPI EA (cat = Baeldung on Kotlin)
announcement - icon

Learn through the super-clean Baeldung Pro experience:

>> Membership and Baeldung Pro.

No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.

1. Overview

In this short tutorial, we’ll look at how to iterate over a map in Kotlin. We’ll see how we can do this with for loops, iterators, and some handy extension functions.

2. Iterate With a for Loop

The simplest way to iterate over a map is to iterate over its Entry objects:

val map = mapOf("Key1" to "Value1", "Key2" to "Value2", "Key3" to "Value3")
map.forEach { entry ->
    print("${entry.key} : ${entry.value}")
}

Here, the in operator gives us a handle to the iterator of the map’s entries property. This is essentially the same as:

for (entry in map.entries.iterator()) {
    print("${entry.key} : ${entry.value}")
}

3. Using forEach 

We can also use the handy forEach extension function:

map.forEach { entry ->
    print("${entry.key} : ${entry.value}")
}

To further reduce boilerplate, we can use destructuring. Doing so expands the Entry into handy key and value variables:

map.forEach { (key, value) ->
    print("$key : $value")
}

4. Using the Map.keys Property

Sometimes, we’d only like to iterate over the keys in the map. In that case, we can use the map’s keys property:

for (key in map.keys) {
    print(key)
}

Here, we get a Set of all keys in the map. This also means we can use the Set‘s forEach extension function:

map.keys.forEach { key ->
    val value = map[key]
    print("$key : $value")
}

We should note that iterating over keys and values this way is less efficient. This is because we make multiple get calls on the map to fetch values for the given keys. This can be avoided by using the Entry iteration approach, for instance.

5. Using the map.values Property

Similarly, we can use the map’s values property to get a collection of all values:

for (value in map.values) {
    print(value)
}

Since the values property gives us a collection, we can use the forEach pattern here:

map.values.forEach { value ->
    print(value)
}

6. Conclusion

In this article, we saw several ways to iterate over a map. Some approaches are more flexible but come with a performance cost.

For most use cases, using forEach over entries is a good option.

The code backing this article is available on GitHub. Once you're logged in as a Baeldung Pro Member, start learning and coding on the project.