groupBy와 groupingBy 함수는 비슷한 기능을 제공하지만 사용 방법과 반환값이 다르다 !!
groupBy
groupBy 함수는Map<K, List<V>>형태의 결과를 반환한다. 즉, 키와 키에 해당하는 요소들을 리스트로 묶은 맵을 반환한다. 이 함수는 컬렉션의 각 요소에 대해 키를 추출하여 그룹화하고, 각 그룹은 해당 키와 일치하는 요소들의 리스트로 표현된다.
위 예시처럼 문자열의 길이를 기준으로 그룹화할 수 있습니다.
val words = listOf("apple", "apricot", "banana", "blueberry", "cherry")
val groupsByFirstChar = words.groupBy { it.first() }
println(groupsByFirstChar)
// 출력: {a=[apple, apricot], b=[banana, blueberry], c=[cherry]}
문자열의 첫 글자를 기준으로 그룹화할 수 있습니다.
al words = listOf("apple", "apricot", "banana", "blueberry", "cherry")
val groupsByFirstChar = words.groupBy { it.first() }
println(groupsByFirstChar)
// 출력: {a=[apple, apricot], b=[banana, blueberry], c=[cherry]}
데이터 클래스와 함께 사용할 수도 있습니다.
data class Person(val name: String, val age: Int)
val people = listOf(
Person("Alice", 30),
Person("Bob", 25),
Person("Charlie", 30),
Person("David", 25),
Person("Eve", 35)
)
val groupsByAge = people.groupBy { it.age }
println(groupsByAge)
// 출력: {30=[Person(name=Alice, age=30), Person(name=Charlie, age=30)],
// 25=[Person(name=Bob, age=25), Person(name=David, age=25)], 35=[Person(name=Eve, age=35)]}
groupingBy
groupingBy 함수는 Grouping<T, K> 객체를 반환한다. 이 객체는 그룹화된 요소를 나타내는 eachCount 및 fold와 같은 함수를 제공한다. Grouping 객체는 각 그룹에서 요소를 추출하고 계산하는 데 사용된다.
짝수와 홀수로 그룹화하고 각 그룹의 요소 개수 세기
val numbers = listOf(1, 2, 3, 4, 5, 6)
val groups = numbers.groupingBy { if (it % 2 == 0) "even" else "odd" }
//Grouping 타입을 반환하며, 이 타입 자체를 직접 출력하는 방법은 없습니다.
//Grouping 타입을 반환하며, 이 타입 자체를 직접 출력하는 방법은 없습니다.
//Grouping 타입을 반환하며, 이 타입 자체를 직접 출력하는 방법은 없습니다.
val counts = groups.eachCount()
println(counts) // 출력: {odd=3, even=3}
문자열의 첫 글자로 그룹화하고 각 그룹의 요소 개수 세기
val words = listOf("apple", "apricot", "banana", "blueberry", "cherry")
val groups = words.groupingBy { it.first() }
val counts = groups.eachCount()
println(counts)
// 출력: {a=2, b=2, c=1}
문자열의 첫 글자로 그룹화하고 각 그룹의 단어를 연결하기
val words = listOf("apple", "apricot", "banana", "blueberry", "cherry")
val groups = words.groupingBy { it.first() }
val concatenatedWords = groups.fold("") { acc, word -> acc + word }
println(concatenatedWords)
// 출력: {a=appleapricot, b=bananablueberry, c=cherry}
'코딩테스트 준비(kotlin) > 문법정리' 카테고리의 다른 글
[kotlin 문법] sorted(), sort(), sortedWith(), sortWith() , sortedBy, sortBy() (0) | 2024.07.10 |
---|---|
[kotlin] distinct 중복 제거 (0) | 2024.05.22 |
kotlin - filter (0) | 2024.04.22 |
[kotlin] 코틀린 입력 및 출력 (1) | 2023.10.16 |
[kotlin] 람다표현식 (0) | 2023.08.06 |