What is the most efficient way to convert a List of objects to a Map in Kotlin. Given a list of objects, a map is a structure that allows for efficient retrieval of values associated with a specific key.
CodePudding user response:
The function to do this is actually built in to Kotlin. It's called associateBy.
inline fun <T, K> Iterable<T>.associateBy( keySelector: (T) -> K ): Map<K, T>
It takes a single argument, mapping an element of type T to the desired key of type K.
So, if you had a list of Person objects, and each person had a name you wanted to index by, you could write
personList.associateBy { it.name }
to get the map from names to people.
Note that there also exists a more general function called associate, which maps a T to a key and a value (where the value may or may not be equal to the original T value). This is useful if you want to perform a mapping and produce an associative container at the same time. But since it sounds like your use case involves indexing existing objects, associateBy is probably sufficient.
