[Kotlin] 람다(Lambda), Collection 함수형 API 활용하기

Jinbro·2022년 1월 19일
0

Kotlin

목록 보기
3/5

Lambda

람다 : 람다 표현식, 익명 함수를 포현하는 방법
익명 함수 : 실행 가능한 code block

Kotlin은 중괄호 block {} 내에 실행될 코드만 정의

val sum = {x:Int, y:Int -> x + y} // {params -> 실행될 code block 정의}

Collection API

Collection : 데이터 집합 (Array)

Kotlin은 Collection 관련 표준 library 제공 (TypeScript와 유사)
1. all : 모든 item이 조건을 만족하는지
2. any : 조건을 만족하는 item이 최소 1개 있는지
3. count : 조건을 만족하는 item 개수
4. filter : 조건을 만족하는 item만 뽑아 새로운 Collection 반환
5. map : item을 변환하여 새로운 Collection 반환
6. find : 조건을 만족하는 item 1 개만 반환
7. groupBy : param이 key가 되고 원소가 값인 Map 반환
8. flatList : Collection 병합

Sample

// vo 선언
data class Salad(var name: String, var price: Int, var code: String)

@Test
fun testCollectionApi() {
	val canBuyPriceRange = { s: Salad -> s.price <= 6000 } // lambda 활용 조건식 객체
        val saladList = listOf(
            Salad("닭가슴살샐러드", 5900, "00001")
            , Salad("훈제오리샐러드", 6900, "00002")
            , Salad("겉절이", 2900, "00003")
        )
        saladList.all(canBuyPriceRange)
        saladList.any(canBuyPriceRange)
        saladList.count(canBuyPriceRange)
        saladList.filter(canBuyPriceRange)
        saladList.map { "${it.name} 의 가격은 <${it.price}> 입니다." } // params 가 하나인 경우 it 키워드 접근 가능
        saladList.find(canBuyPriceRange) // 무조건 1개 요소만 반환
        saladList.groupBy { it.code } // Map<String, List<T> 반환

        val addList = listOf(Salad("콥샐러드", 4900, "00004"))
        val mergeList = listOf(saladList, addList)
        mergeList.flatMap { it.toList() }
}

console log

1. all : false
2. any : true
3. count : 2
4. fileter : [Salad(name=닭가슴살샐러드, price=5900, code=00001), Salad(name=겉절이, price=2900, code=00003)]
5. map : [닭가슴살샐러드 의 가격은 <5900> 입니다., 훈제오리샐러드 의 가격은 <6900> 입니다., 겉절이 의 가격은 <2900> 입니다.]
6. find : Salad(name=닭가슴살샐러드, price=5900, code=00001)
7. groupBy : {00001=[Salad(name=닭가슴살샐러드, price=5900, code=00001)], 00002=[Salad(name=훈제오리샐러드, price=6900, code=00002)], 00003=[Salad(name=겉절이, price=2900, code=00003)]}
8. flatMap : [Salad(name=닭가슴살샐러드, price=5900, code=00001), Salad(name=훈제오리샐러드, price=6900, code=00002), Salad(name=겉절이, price=2900, code=00003), Salad(name=콥샐러드, price=4900, code=00004)]

참고

profile
자기 개발 기록 저장소

0개의 댓글