컬렉션 처리 방법 (map, filter 등) - swkim0128/PARA GitHub Wiki
코틀린의 컬렉션 처리 함수는 데이터를 효율적으로 변환, 필터링 및 집계하는 기능을 제공합니다. map, filter, reduce, forEach 등의 함수를 사용하면 컬렉션을 간결하고 가독성 있게 처리할 수 있습니다.
- 컬렉션의 각 요소를 변환하여 새로운 컬렉션을 생성합니다.
문법
collection.map { 변환할 로직 }
예제
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }
println(doubled) // 출력: [2, 4, 6, 8, 10]
val strings = numbers.map { "Number $it" }
println(strings) // 출력: [Number 1, Number 2, Number 3, Number 4, Number 5]
}
- 특정 조건을 만족하는 요소만 포함하는 새로운 컬렉션을 생성합니다.
문법
collection.filter { 조건식 }
예제
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // 출력: [2, 4]
val greaterThanThree = numbers.filter { it > 3 }
println(greaterThanThree) // 출력: [4, 5]
}
- 컬렉션의 각 요소에 대해 특정 작업을 수행하지만, 결과를 반환하지 않습니다.
문법
collection.forEach { 작업 }
예제
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
numbers.forEach { println(it) }
}
- 초기값 없이 컬렉션을 하나의 값으로 축약합니다.
- 첫 번째 요소를 기본값으로 사용.
문법
collection.reduce { 누적값, 현재값 -> 계산식 }
예제
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val sum = numbers.reduce { acc, num -> acc + num }
println(sum) // 출력: 15
val product = numbers.reduce { acc, num -> acc * num }
println(product) // 출력: 120
}
- 초기값을 설정하여 컬렉션을 하나의 값으로 축약합니다.
문법
collection.fold(초기값) { 누적값, 현재값 -> 계산식 }
예제
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val sum = numbers.fold(10) { acc, num -> acc + num }
println(sum) // 출력: 25
val joined = numbers.fold("Numbers:") { acc, num -> "$acc $num" }
println(joined) // 출력: Numbers: 1 2 3 4 5
}
- 조건을 만족하는 첫 번째 요소를 반환하며, 없으면 null을 반환합니다.
문법
collection.find { 조건식 }
예제
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val result = numbers.find { it > 3 }
println(result) // 출력: 4
}
- 컬렉션을 특정 기준에 따라 그룹화하여 Map 형태로 반환합니다.
문법
collection.groupBy { 기준 }
예제
fun main() {
val names = listOf("Alice", "Bob", "Charlie", "David")
val grouped = names.groupBy { it.length }
println(grouped) // 출력: {5=[Alice, David], 3=[Bob], 7=[Charlie]}
}
- 각 요소를 변환 후, 결과를 하나의 리스트로 평탄화(flatten) 합니다.
문법
collection.flatMap { 변환 로직 }
예제
fun main() {
val numbers = listOf(1, 2, 3)
val result = numbers.flatMap { (1..it).toList() }
println(result) // 출력: [1, 1, 2, 1, 2, 3]
}
- 두 컬렉션을 짝지어 Pair로 이루어진 리스트를 생성합니다.
문법
collection1.zip(collection2)
예제
fun main() {
val names = listOf("Alice", "Bob", "Charlie")
val ages = listOf(25, 30, 35)
val paired = names.zip(ages)
println(paired) // 출력: [(Alice, 25), (Bob, 30), (Charlie, 35)]
}
함수 | 역할 | 반환값 |
---|---|---|
map | 각 요소를 변환하여 새로운 컬렉션 생성 | 변환된 요소로 이루어진 컬렉션 |
filter | 조건을 만족하는 요소만 걸러냄 | 조건을 만족하는 요소의 컬렉션 |
forEach | 각 요소에 대해 작업 수행 | 반환값 없음 |
reduce | 요소를 누적하여 단일 값으로 축약 | 단일 값 |
fold | 초기값과 함께 요소를 누적하여 단일 값 생성 | 단일 값 |
find | 조건을 만족하는 첫 번째 요소 반환 | 요소 또는 null |
groupBy | 특정 기준으로 그룹화 | Map<Key, List> |
flatMap | 각 요소를 변환 후 평탄화 | 변환된 요소의 단일 컬렉션 |
zip | 두 컬렉션을 짝지어 새로운 컬렉션 생성 | List<Pair<T, R>> |
✅ map과 filter를 활용하면 데이터를 쉽게 변환하고 필터링할 수 있음 ✅ reduce와 fold를 사용하면 컬렉션을 하나의 값으로 축약 가능 ✅ groupBy를 사용하면 데이터를 특정 기준으로 그룹화 가능 ✅ flatMap과 zip을 활용하면 컬렉션을 더욱 유연하게 변형 가능
🎯 코틀린의 컬렉션 함수들을 적절히 활용하면 코드의 가독성과 효율성을 높일 수 있습니다! 🚀