group By To
inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Sequence<T>.groupByTo(destination: M, keySelector: (T) -> K): M
Content copied to clipboard
Groups elements of the original sequence by the key returned by the given keySelector function applied to each element and puts to the destination map each group key associated with a list of corresponding elements.
Return
The destination map.
The operation is terminal.
Samples
import samples.*
import kotlin.test.*
fun main() {
//sampleStart
val words = listOf("a", "abc", "ab", "def", "abcd")
val byLength = words.groupBy { it.length }
assertPrints(byLength.keys, "[1, 3, 2, 4]")
assertPrints(byLength.values, "[[a], [abc, def], [ab], [abcd]]")
val mutableByLength: MutableMap<Int, MutableList<String>> = words.groupByTo(mutableMapOf()) { it.length }
// same content as in byLength map, but the map is mutable
assertTrue(mutableByLength == byLength)
//sampleEnd
}
inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Sequence<T>.groupByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M
Content copied to clipboard
Groups values returned by the valueTransform function applied to each element of the original sequence by the key returned by the given keySelector function applied to the element and puts to the destination map each group key associated with a list of corresponding values.
Return
The destination map.
The operation is terminal.
Samples
import samples.*
import kotlin.test.*
fun main() {
//sampleStart
val nameToTeam = listOf("Alice" to "Marketing", "Bob" to "Sales", "Carol" to "Marketing")
val namesByTeam = nameToTeam.groupBy({ it.second }, { it.first })
assertPrints(namesByTeam, "{Marketing=[Alice, Carol], Sales=[Bob]}")
val mutableNamesByTeam = nameToTeam.groupByTo(HashMap(), { it.second }, { it.first })
// same content as in namesByTeam map, but the map is mutable
assertTrue(mutableNamesByTeam == namesByTeam)
//sampleEnd
}