PHpullh
학습 라이브러리/Kotlin/groupBy와 associate

KOTLIN · 컬렉션

groupBy와 associate

groupBy로 원소를 그룹화하고, associate로 맵을 생성합니다. 데이터 변환의 핵심 함수입니다.

컬렉션중급groupByassociateassociateBydata-transformation

핵심 설명

groupBy로 원소를 그룹화하고, associate로 맵을 생성합니다. 데이터 변환의 핵심 함수입니다.

Kotlin code

data class Employee(val name: String, val dept: String, val salary: Int)

fun main() {
    val employees = listOf(
        Employee("김철수", "개발", 5000),
        Employee("이영희", "개발", 6000),
        Employee("박지성", "마케팅", 4500),
        Employee("최유리", "마케팅", 5500),
        Employee("정민호", "인사", 4000),
    )

    // groupBy: 부서별 그룹화
    val byDept = employees.groupBy { it.dept }
    byDept.forEach { (dept, emps) ->
        println("$dept: ${emps.map { it.name }}")
    }

    // associateBy: 키로 맵 생성
    val byName = employees.associateBy { it.name }
    println(byName["김철수"])

    // associate: 키-값 쌍 맵 생성
    val salaryMap = employees.associate { it.name to it.salary }
    println(salaryMap)

    // groupBy + 집계
    val avgSalary = employees.groupBy { it.dept }
        .mapValues { (_, emps) -> emps.map { it.salary }.average() }
    println("부서별 평균: $avgSalary")
}

학습 팁

groupBy는 한 키에 여러 값을, associateBy는 한 키에 하나의 값을 매핑합니다. 중복 키가 있으면 마지막 값이 유지됩니다.

주의할 점

associateBy에서 키가 중복되면 나중 값이 이전 값을 덮어씁니다. 중복이 예상되면 groupBy를 사용하세요.

자주 묻는 질문

groupBy와 associate란 무엇인가요?

groupBy 로 원소를 그룹화하고, associate 로 맵을 생성합니다. 데이터 변환의 핵심 함수입니다.

groupBy와 associate 학습 시 주의할 점은 무엇인가요?

associateBy 에서 키가 중복되면 나중 값이 이전 값을 덮어씁니다. 중복이 예상되면 groupBy 를 사용하세요.