본문 바로가기

기타/안드로이드

23. Kotlin의 컬렉션에서 쓰는 고차함수

 

Kotlin의 컬렉션에서 쓰는 고차함수

컬렉션을 사용한 고차 함수

 

컬렉션을 사용한 고차 함수  |  Android Developers

Kotlin에서 컬렉션과 함께 일반적인 고차 함수를 사용하는 방법을 알아보세요.

developer.android.com

위의 페이지를 참고하여 컬렉션에서 사용할 수 있는 유용한 고차함수들을 정리해보자

 

개요

고차함수는 함수를 인자를 받는 친구라는 것은 이미 알고 있다

그런데 그 중에서도 컬렉션에 유용한 고차함수들이 있는데

내용을 간단하게 살펴보자

 

 

1. forEach()

이름만 봐도 뭐하는 애인 지 알 거 같은 친구다

데이터 구조의 각 항목에 대해 인수로 전달된 함수를 적용한다

fun main() {
    val li = listOf("Kim", "Lee", "Park")
    li.forEach{
        println("hello " + it)
    }
}

후행람다문법을 이용해 괄호를 생략했고

it을 이용했다는 점이 포인트다

 

2. map()

기존의 데이터 구조에 변경을 가해 값이 바뀐 새로운 데이터 구조를 만든다

당연히 크기는 유지된다

fun main() {
    val li = listOf("Kim", "Lee", "Park")
    val newLi = li.map{
        "${it} chulsu"
    }
    newLi.forEach{
        println(it)
    }
}

람다식의 특징들을 잘 살펴보자

it, 괄호 없음, return 없음

 

3. filter()

이 친구는 map처럼 새로운 데이터 구조를 만든다

다른 점은 인자로 받은 함수가 참인 경우 새로운 데이터 구조에 포함시키고

그렇지 않으면 그냥 버린다

fun main() {
    val li = listOf("Kim", "Lee", "Park")
    val newLi = li.filter{
        it.length == 3
    }
    newLi.forEach{
        println(it)
    }
}

 

 

4. groupBy

이 친구는 전달된 함수의 결과 값을 가지고 데이터 구조를 여러 그룹으로 분할해준다

리턴값은 함수의 결과값을 key로 가지고

결과값이 동일한 항목을 모아놓은 list를 value로 하는 map이다

fun main() {
    val li = listOf("Kim", "Lee", "Park")
    val newLi = li.groupBy{
        it.length
    }
    val group1 = newLi[2] ?: emptyList()
    val group2 = newLi[3] ?: listOf()
    val group3 = newLi[4] ?: emptyList()
    println(group1)
    println(group2)
    println(group3)
}

map의 참조는 null을 반환하기도 하기 때문에 elvis 연산자를 쓸 수 있다

listOf()는 빈 list를 반환하고 emptyList()도 같은 역할을 한다

 

5. fold

초기값에 각 항목에 대한 계산결과를 계속 더해준다

fun main() {
    val li = listOf(1,2,3,4,5,6,7,8,9,10)
    val total = li.fold(0){total, num -> total + num}
    println(total)

    val li2 = listOf("hello.", " my name is Kim.", " Nice to meet you.")
    val sentences = li2.fold(""){total, sentence -> total + sentence}
    println(sentences)
}

li2 같은 예제도 생각해볼 수 있겠다

reduce, sumof, sumwith 등을 참고하면 좋다

 

 

6. sortedBy

이름만 들어도 정렬을 위한 조건을 함수로 넘겨주면 정렬된 데이터구조를 넘겨줄 것 같다

fun main() {
    val li = listOf("Kim", "Lee", "Park", "Choi")
    val newLi = li.sortedBy{
        it
    }
    println(newLi)
}

그냥 알파벳 순으로 정렬하는 예제이다

sort, sortwith도 있다

'기타 > 안드로이드' 카테고리의 다른 글

25. 앱 아이콘 바꾸기  (0) 2022.10.14
24. Affirmation App : Scroll 기능  (0) 2022.10.14
22. Kotlin의 컬렉션  (2) 2022.10.14
21. Kotlin의 generic, enum, data class, object, 범위함수  (0) 2022.10.14
20. My Art Gallery App  (0) 2022.10.14