리스트의 요소가 같은 것의 개수를 세는 코드를 반복문을 사용하여 카운트 하는 방식으로 진행하였는데 새로운 방식으로 코드를 작성해보고 싶다는 생각이 들었다. 검색을 하다 groupingBy라는 함수를 알게 되었고 eachCount함수와 같이 사용하여 코드를 작성할 수 있었다. 이 부분을 되새기기 위해 기록한다.
groupingBy
라는 확장 함수가 있다.gorupingBy
함수는 컬렉션을 그룹화 시키는 Grouping<T, K>
객체를 반환하며 이 객체는 그룹화된 요소의 연산을 수행하는 함수를 제공한다. val list1 = listOf("apple", "banana", "grapes", "peach")
val result1 = list1.groupingBy { it.length }
val list2 = listOf(1, 1, 2, 2, 2, 3)
val result2 = list2.groupingBy { it }
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
val list1 = listOf("apple", "banana", "grapes", "peach")
val result1 = list1.groupBy { it.length } // 문자열의 길이에 따라 그룹화하여 맵으로 반환
println("$result1") // {5=[apple, peach], 6=[banana, grapes]}