•
Kotlin 표준 라이브러리는 컬렉션 요소를 그룹화하기 위한 확장 함수를 제공한다.
val numbers = listOf("one", "two", "three", "four", "five")
// groupBy()를 사용하여 문자열을 첫 글자로 그룹화
val groupedByFirstLetter = numbers.groupBy { it.first().uppercase() }
println(groupedByFirstLetter)
// {O=[one], T=[two, three], F=[four, five]}
// 각 그룹을 반복하여 키와 관련 값을 출력
for ((key, value) in groupedByFirstLetter) {
println("Key: $key, Values: $value")
}
// Key: O, Values: [one]
// Key: T, Values: [two, three]
// Key: F, Values: [four, five]
Kotlin
복사
•
기본 함수인 groupBy() 는 람다 함수를 받아 Map을 반환한다.
•
이 Map에서 각 Key는 람다 결과이며 해당 Value는 이 결과가 반환된 요소들의 List이다.
val numbers = listOf("one", "two", "three", "four", "five")
// 문자열을 첫 글자로 그룹화하고 값을 대문자로 변환
val groupedAndTransformed = numbers.groupBy(keySelector = { it.first() }, valueTransform = { it.uppercase() })
println(groupedAndTransformed)
// {o=[ONE], t=[TWO, THREE], f=[FOUR, FIVE]}
Kotlin
복사
•
groupBy() 를 두 번째 람다 인자와 함께 호출할 수도 있다.
•
이 경우 결과 Map의 Key는 keySelector 함수에 의해 생성되고 원래 요소 대신 valueTransform 함수의 결과에 매핑된다.
val numbers = listOf("one", "two", "three", "four", "five")
// groupingBy()를 사용하여 문자열을 첫 글자로 그룹화하고 각 그룹의 요소 수를 계산
val grouped = numbers.groupingBy { it.first() }.eachCount()
// 각 그룹을 반복하여 키와 연결된 요소 수 출력
for ((key, count) in grouped) {
println("Key: $key, Count: $count")
// Key: o, Count: 1
// Key: t, Count: 2
// Key: f, Count: 2
}
Kotlin
복사
•
요소를 그룹화한 다음 모든 그룹에 대해 한 번에 작업을 수행하려면 groupingBy() 함수를 사용하라.
•
이 함수는 Grouping 타입의 인스턴스를 반환한다.
•
Grouping 인스턴스는 모든 그룹에 대해 지연 방식으로 작업을 적용할 수 있다.
•
Grouping 인스턴스는 다음과 같은 작업을 지원한다.
◦
eachCount() : 각 그룹의 요소 수를 계산한다.
◦
fold() 및 reduce() : 각 그룹을 개별 컬렉션으로 보고 fold 및 reduce 작업을 수행하고 결과를 반환한다.
◦
aggregate() : 주어진 작업을 각 그룹의 모든 요소에 차례로 적용하고 결과를 반환한다.
•
결과 Map에서 for 연산자를 사용하여 groupingBy() 함수로 생성된 그룹을 반복할 수 있다.
•
이를 통해 각 Key와 해당 Key에 대한 Grouping 인스턴스의 작업 결과에 접근할 수 있다.