Kotlin groupingBy 정리

WWWKR·2025년 8월 26일
0

1. groupingBy란?

Kotlin에서 리스트를 그룹핑 하는 groupingBy는 "그룹핑 전략"만 정의하는 객체(Grouping)를 반환합니다.
즉, 아직 결과가 만들어진 건 아니고, 터미널 연산을 붙여야 최종 Map이 생성됩니다.

  val list = listOf(1, 2, 2, 3, 3, 3)
  val grouping = list.groupingBy { it }
  //  Grouping 객체만 생성됨

2. groupingBy의 터미널 연산

Grouping에 붙일 수 있는 터미널 연산은 총 4가지입니다.

eachCount(), fold(), reduce(), aggregate()

1) eachCount()

각 그룹별 원소의 개수를 세어줍니다.

반환: Map<K, Int>

val list = listOf(1, 2, 2, 3, 3, 3)
val result = list.groupingBy { it }.eachCount()
// {1=1, 2=2, 3=3}

2) fold(initial, operation)

그룹마다 초기값을 두고, 원소들을 누적 처리합니다.

반환: Map<K, R>

val result = list.groupingBy { it % 2 }
  .fold(0) { acc, _ -> acc + 1 }
// {1=3, 0=3} (홀수 3개, 짝수 3개)

3) reduce(operation)

그룹별 첫 원소를 시작 값으로 두고, 나머지를 순차적으로 누적합니다.

반환: Map<K, T>

val result = list.groupingBy { it }.reduce { _, acc, e -> acc + e }
// {1=1, 2=4, 3=9} (같은 숫자 합치기)

4) aggregate(operation)

가장 범용적인 연산입니다.

accumulator를 직접 정의할 수 있어, fold·reduce보다 자유도가 높습니다.

val result = list.groupingBy { it }.aggregate { _, acc: Int?, e, _ ->
  (acc ?: 0) + e
}
// {1=1, 2=4, 3=9}
profile
안드로이드 개발자

0개의 댓글