Lewis's Tech Keep
[Kotlin] 코틀린 적응기 - 람다, 컬렉션 함수형 본문
시작
람다 형식이 달라서 약간 어색하지만 유용하게 사용할 수 있기를!
배우고 있는 것
https://www.inflearn.com/course/java-to-kotlin
1. 람다
람다 그 자체를 변수로 사용하거나, 파라미터로 넘길 수 있다.
// 함수 그 자체로 변수에 할당할 수도, 파라미터로 사용 될 수도 있다.
fun main() {
val fruits = listOf(
Fruit("사과", 1_000),
Fruit("사과", 1_200),
Fruit("사과", 1_200),
Fruit("사과", 1_500),
Fruit("바나나", 3_000),
Fruit("바나나", 2_000),
Fruit("바나나", 2_500),
Fruit("수박", 10_000),
)
val isApple: (Fruit) -> Boolean = fun(fruit: Fruit): Boolean {
return fruit.name == "사과"
}
val isApple2 = { fruit: Fruit -> fruit.name == "사과" }
// call
isApple(fruits[0])
isApple.invoke(fruits[0])
// filter
filterFruits(fruits, isApple2)
filterFruits(fruits) { fruit -> fruit.name == "사과" }
}
private fun filterFruits(
fruits: List<Fruit>, filter: (Fruit) -> Boolean)
: List<Fruit> {
val results = mutableListOf<Fruit>()
for (fruit in fruits) {
if (filter.invoke(fruit)) {
results.add(fruit)
}
}
return results
}
2. 컬렉션 함수형 다루기
아래 예시와 같은 다양한 형태로 사용 가능하다.
필요할 때 찾아보는 것이 더 좋다.
fun main() {
val fruits = listOf(
Fruit("사과", 1_000),
Fruit("사과", 1_200),
Fruit("사과", 1_200),
Fruit("사과", 1_500),
Fruit("바나나", 3_000),
Fruit("바나나", 2_000),
Fruit("바나나", 2_500),
Fruit("수박", 10_000),
)
// filter
filterFruits(fruits) { fruit -> fruit.name == "사과" }
// toMap
/* name, List<Fruit> */
fruits.groupBy { fruit -> fruit.name }
/* name, Fruit */
fruits.associateBy { fruit -> fruit.name }
/* name, List<Int(price)> */
fruits.groupBy ({ fruit -> fruit.name }, { fruit -> fruit.price})
}
private fun filterFruits(
fruits: List<Fruit>, filter: (Fruit) -> Boolean)
: List<Fruit> {
return fruits.filter(filter)
}
'Kotlin > Kotlin 적응기' 카테고리의 다른 글
[Kotlin] 코틀린 적응기 - scope function (2) | 2024.10.01 |
---|---|
[Kotlin] 코틀린 적응기 - typealias, as import, 람다 break & continue, label, takeif (0) | 2024.10.01 |
[kotlin] 코틀린 적응기 - 배열 & 컬렉션, 함수 (0) | 2024.10.01 |
[Kotlin] 코틀린 적응기 - 중첩 클래스, data class & enum class & sealed class (0) | 2024.10.01 |
[Kotlin] 코틀린 적응기 - 접근 제어, object (0) | 2024.10.01 |
Comments