요소에 적용된 지정된 keySelector 함수에 의해 반환된 키로 원본 컬렉션의 각 요소에 적용된 valueTransform 함수에 의해 반환된 값을 그룹화하고 각 그룹 키가 해당 값 목록과 연결된 맵을 반환합니다. 반환된 맵은 원래 컬렉션에서 생성된 키의 항목 반복 순서를 유지합니다.
public inline fun <T, K> Iterable<T>.groupBy(keySelector: (T) -> K): Map<K, List<T>> {
return groupByTo(LinkedHashMap<K, MutableList<T>>(), keySelector)
}
public inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Iterable<T>.groupByTo(destination: M, keySelector: (T) -> K): M {
for (element in this) {
val key = keySelector(element)
val list = destination.getOrPut(key) { ArrayList<T>() }
list.add(element)
}
return destination
}
val words = listOf("a", "abc", "ab", "def", "abcd")
val byLength = words.groupBy { it.length }
println(byLength.keys) // [1, 3, 2, 4]
println(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
println("mutableByLength == byLength is ${mutableByLength == byLength}") // true
val strs = ["eat","tea","tan","ate","nat","bat"]
val map = strs.groupBy { it.toList().sorted() }
return map.values // Collection<List<String>>
'코틀린 > [Aggregation] 집계 작업' 카테고리의 다른 글
[Kotlin][Collection] groupingBy with eachCount (0) | 2024.09.07 |
---|---|
[Kotlin][Collection] count (0) | 2024.08.14 |
[Kotlin][Collection] average (0) | 2024.08.13 |