본문 바로가기
코틀린/[Aggregation] 집계 작업

[Kotlin][Collection] groupBy

by jinwo_o 2024. 9. 4.

요소에 적용된 지정된 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>>

 

groupBy - Kotlin Programming Language

 

kotlinlang.org

'코틀린 > [Aggregation] 집계 작업' 카테고리의 다른 글

[Kotlin][Collection] groupingBy with eachCount  (0) 2024.09.07
[Kotlin][Collection] count  (0) 2024.08.14
[Kotlin][Collection] average  (0) 2024.08.13