Kotlin의 컬렉션에서 쓰는 고차함수
위의 페이지를 참고하여 컬렉션에서 사용할 수 있는 유용한 고차함수들을 정리해보자
개요
고차함수는 함수를 인자를 받는 친구라는 것은 이미 알고 있다
그런데 그 중에서도 컬렉션에 유용한 고차함수들이 있는데
내용을 간단하게 살펴보자
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 |