PHpullh
학습 라이브러리/Kotlin/컬렉션 함수형 API — filter, map, reduce

KOTLIN · 컬렉션

컬렉션 함수형 API — filter, map, reduce

Kotlin 컬렉션의 강력한 함수형 API로 선언적인 데이터 변환을 구현합니다.

컬렉션중급filtermapreducefoldgroupBy

핵심 설명

Kotlin 컬렉션의 강력한 함수형 API로 선언적인 데이터 변환을 구현합니다.

Kotlin code

data class Product(val name: String, val price: Int, val stock: Int)

val products = listOf(
    Product("Kotlin Book",  35000, 10),
    Product("Java Book",    30000,  0),
    Product("Go Guide",     28000,  5),
    Product("Python Crash", 25000, 20),
)

// filter
val inStock = products.filter { it.stock > 0 }

// map
val names = products.map { it.name }
val prices = products.map { it.price }

// find / firstOrNull
val cheap = products.firstOrNull { it.price < 30000 }

// groupBy
val byStock = products.groupBy { if (it.stock > 0) "재고있음" else "품절" }

// partition — 두 리스트로 분리
val (available, soldOut) = products.partition { it.stock > 0 }

// flatMap
val nested = listOf(listOf(1,2), listOf(3,4))
val flat = nested.flatMap { it }            // [1, 2, 3, 4]

// reduce / fold
val total = prices.reduce { sum, p -> sum + p }
val avg   = prices.fold(0) { sum, p -> sum + p } / prices.size

// sortedBy / sortedByDescending
val sorted = products.sortedBy { it.price }
val top3   = products.sortedByDescending { it.price }.take(3)

// 체이닝
val result = products
    .filter { it.stock > 0 }
    .sortedBy { it.price }
    .map { "${it.name}: ${it.price}원" }

학습 팁

컬렉션 체이닝은 매 단계마다 새 리스트를 생성합니다. 요소가 많다면 .asSequence()로 변환해 지연(lazy) 평가를 사용하세요.

주의할 점

map { }.filter { }보다 mapNotNull { }이 null 제거 + 변환을 한 번에 처리합니다.

자주 묻는 질문

컬렉션 함수형 API — filter, map, reduce란 무엇인가요?

Kotlin 컬렉션의 강력한 함수형 API로 선언적인 데이터 변환을 구현합니다.

컬렉션 함수형 API — filter, map, reduce 학습 시 주의할 점은 무엇인가요?

map { }.filter { } 보다 mapNotNull { } 이 null 제거 + 변환을 한 번에 처리합니다.