[kotlin] 코틀린에서 콜렉션 타입을 이용한 데이터 그룹화

코틀린은 강력한 콜렉션 라이브러리를 제공하여 데이터를 쉽게 그룹화하고 처리할 수 있습니다. 이 글에서는 코틀린에서 제공하는 콜렉션 타입을 이용하여 데이터를 그룹화하는 방법에 대해 알아보겠습니다.

List와 Map

코틀린에서 가장 흔히 사용되는 두 가지 콜렉션 타입은 List와 Map입니다. List는 순서가 있는 데이터를 담는 자료구조이며, Map은 키-값 쌍의 데이터를 담는 자료구조입니다.

val languages = listOf("Kotlin", "Java", "Python", "C++", "JavaScript")
val users = mapOf(1 to "Alice", 2 to "Bob", 3 to "Charlie")

Grouping 데이터

List를 그룹화하려면 groupBy 함수를 사용합니다. 이 함수는 주어진 조건에 따라 List를 그룹화하여 Map으로 반환합니다.

val groupedByLength = languages.groupBy { it.length }
// 결과: {6=[Kotlin, Python], 4=[Java, JavaScript], 3=[C++]}

Map의 값을 그룹화하려면 groupBy 함수 대신 groupByTo 함수를 사용하여 원하는 Map에 데이터를 그룹화할 수 있습니다.

val usersByFirstLetter = mutableMapOf<Char, List<String>>()
users.forEach { id, name -> usersByFirstLetter.getOrPut(name[0], { mutableListOf() }).add(name) }
// 결과: {A=[Alice], B=[Bob], C=[Charlie]}

복수 조건에 따라 그룹화하기

때로는 복수의 조건에 따라 데이터를 그룹화해야 하는 경우가 있습니다. 이때 groupBy 함수에 람다를 활용하여 복수 조건에 따라 데이터를 그룹화할 수 있습니다.

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
val groupedByEvenOdd = numbers.groupBy { if (it % 2 == 0) "even" else "odd" }
// 결과: {odd=[1, 3, 5, 7, 9], even=[2, 4, 6, 8]}

마치며

코틀린의 강력한 콜렉션 라이브러리를 이용하면 데이터를 쉽게 그룹화하고 처리할 수 있습니다. groupBy 함수를 효과적으로 활용하여 다양한 조건에 따라 데이터를 그룹화하는 방법에 대해 알아보았습니다. 이를 통해 코드를 더 간결하고 가독성있게 작성할 수 있습니다.

참고 문헌:

위에서 소개한 기능과 예제는 Kotlin 1.4 기준으로 작성되었습니다.