[Kotlin] GroupingBy

Subeen·2023년 11월 22일
0

Kotlin 문법

목록 보기
3/23

리스트의 요소가 같은 것의 개수를 세는 코드를 반복문을 사용하여 카운트 하는 방식으로 진행하였는데 새로운 방식으로 코드를 작성해보고 싶다는 생각이 들었다. 검색을 하다 groupingBy라는 함수를 알게 되었고 eachCount함수와 같이 사용하여 코드를 작성할 수 있었다. 이 부분을 되새기기 위해 기록한다.

GroupingBy란?

  • 코틀린 컬렉션에는 groupingBy라는 확장 함수가 있다.
  • gorupingBy함수는 컬렉션을 그룹화 시키는 Grouping<T, K>객체를 반환하며 이 객체는 그룹화된 요소의 연산을 수행하는 함수를 제공한다.

GroupingBy 사용법

  • list의 문자열의 길이를 key로 하여 묶는다.
    문자열 길이가 같은 "apple"과 "peach"가 한묶음 "banana"와 "grapes"가 한 묶음으로 그룹화 된다.
val list1 = listOf("apple", "banana", "grapes", "peach")

val result1 = list1.groupingBy { it.length }
  • list의 숫자를 key로 하여 묶으며 숫자가 같은 원소별로 그룹화 된다.
val list2 = listOf(1, 1, 2, 2, 2, 3)

val result2 = list2.groupingBy { it }

GroupingBy와 eachCount

  • eachCount() : 각 그룹의 원소의 개수를 반환하며 key와 key에 해당하는 원소의 개수를 맵으로 반환한다.
val result = listOf(1, 1, 2, 2, 2, 3).groupingBy { it }.
val count = result.eachCount()
println("$count")  // {1=2, 2=3, 3=1}

val list = listOf(0, 1, 1, 2, 2, 2, 3, 3, 3, 3).groupingBy { it }.eachCount()
println("$list")  // {0=1, 1=2, 2=3, 3=4}
        
val result1 = list.count { it.value == 1 } 
println("$result1")  // 1
        
val result2 = list.filter { it.value < 3}
println("$result2")  // {0=1, 1=2}

val result3 = list.maxByOrNull { it.value }?.key
println("$result3")  // 3

GroupBy

  • GroupBy 함수는 Map<K, List> 형태를 반환하는데 키와 키에 해당하는 요소들을 리스트로 묶은 맵을 반환한다.
val list1 = listOf("apple", "banana", "grapes", "peach")
       
val result1 = list1.groupBy { it.length } // 문자열의 길이에 따라 그룹화하여 맵으로 반환 
        
println("$result1")  // {5=[apple, peach], 6=[banana, grapes]}
profile
개발 공부 기록 🌱

0개의 댓글