티스토리 뷰
1. 매핑 함수
map(), mapIndexed()
map() 함수는 forEach() 함수와 유사합니다. 집합 객체의 데이터 수만큼 반복하여 실행하는 것을 동일하나 forEach()와는 다르게 반환값이 있다는 점입니다. forEach()는 단순히 반복 실행만 하지만 map()은 반복실행 한 후 결과 값을 반환합니다.
val list = listOf<Int>(12, 8, 9, 20)
list.filter { it > 10 }
.map { it * 10 }
.forEach { println(it) }
결과는 120, 200이 출력됩니다.
val list = listOf<Int>(12, 8, 9, 20)
list.filter { it > 10 }
.map { it * 10 }
.map { println(it) }
위 코드 역시 결과는 동일합니다.
mapIndexed() 함수는 map() 함수와 동일하지만 람다 함수에 인덱스까지 전달해주는 함수입니다.
listOf(1, 2, 3).mapIndexed { index, data -> index * data }
.forEach { println(it) }
위 함수는 각 인덱스와 값을 곱하여 리스트를 반환하고 그 리스트의 각 값을 forEach 함수를 통해 print해주는 함수입니다.
class User(val name: String, val age: Int)
fun main(args: Array<String>) {
val list = listOf<User>(User("kim", 25), User("lee", 28), User("kim", 25))
list.groupBy { it.age }
.forEach {
println("key : ${it.key} ... count : ${it.value.count()}")
it.value.forEach { println("${it.name} .. ${it.age}") }
}
}
위 코드는 age를 기준으로 동일한 age값을 가진 데이터들을 그룹화하여 개수를 출력해주는 함수입니다.
25와 28을 key 값으로 하여 결과를 Map 타입으로 반환합니다.
2. 요소 함수
contains()
contains() 함수는 컬렉션 타입의 데이터 중 특정 데이터가 있는지 판단하는 함수로써 있으면 true, 없으면 false를 반환합니다.
val result = listOf(2, 5, 10, 8).contains(7)
println("contains test : $result")
elementAt(), elementAtOrElse(), elementAtOrNull()
elementAt() 함수는 특정 위치의 데이터를 반환하는 함수입니다.
val result = listOf(2, 5, 10, 8).elementAt(2)
println("elementAt test : $result")
위의 함수는 인덱스가 2인 값 즉, 3번째 데이터 (인덱스는 0, 1, 2, 3이므로) 가 반환됩니다.
하지만 주어지는 인덱스 값이 리스트의 크기보다 커질 경우 IndexOutOfBoundsException 예외가 발생합니다.
이를 방지해줄 수 있는 elementAtOrElse() 함수가 있습니다.
이 함수는 입력된 인덱스 값이 리스트의 크기보다 커질 경우 주어진 람다 함수를 실행하여 반환된 값을 반환하게 됩니다.
val result = listOf(2, 5, 10, 8).elementAtOrElse(5, { 0 })
println("elementAtOrElse Test : $result")
인덱스가 초과되었으므로 출력 값은 0이 됩니다.
first(), firstOrNull(), last(), lastOrNull()
first() 함수는 조건에 맞는 데이터 중 첫번째 데이터를 반환해주는 함수입니다.
var result = listOf(2, 5, 10, 8).first { it % 5 == 0 }
println("print test : $result")
출력 값은 5가 됩니다.
last() 함수는 first() 함수와 정반대로 동작하는 함수입니다.
조건에 맞는 데이터 중 마지막 데이터를 반환해주는 함수입니다.
만약 조건에 맞는 데이터가 하나도 없을 경우에는 NoSuchElementException이 발생합니다.
이 경우에 null을 반환해주는 함수가 바로 firstOrNull(), lastOrNull() 입니다.
indexOf(), indexOfFirst(), indexOfLast()
indexOf() 함수는 매개 변수로 전달받은 데이터가 위치하는 인덱스의 첫 번째 값을 반환해주는 함수입니다.
var result = listOf(2, 5, 10, 2).indexOf(2)
println("indexOf test : $result")
위 코드의 반환 값은 0이 됩니다 (2가 첫 번째 위치에 있으므로)
indexOfFirst()와 indexOfLast()는 indexOf와는 다르게 람다 함수를 매개 변수로 받는 함수입니다.
var result = listOf(2, 5, 10, 2).indexOfFirst { it % 2 == 0 }
println("indexOfFirst test : $result")
정렬 함수
reserved()
reserved()함수는 데이터의 순서를 거꾸로 바꿀 때 사용하는 함수입니다.
listOf(1, 5, 2).reserved().forEach { println(it) }
출력값 : 2, 5, 1
sorted(), sortedBy(), sortedDescending(), sortedDescendingBy()
sorted() 함수는 정렬을 목적으로 사용하는 함수입니다.
listOf(1, 5, 2).sorted().forEach { println(it) }
출력값 : 1, 2, 5
listOf("lee", "kim", "park").sorted().forEach { println(it) }
출력값 : kim, lee, park
sortedBy() 함수는 람다 함수를 대입할 수 있고 람다 함수의 결과 값을 대상으로 정렬하는 함수입니다.
listOf(1, 3, 2).sortedBy { it % 3 }.forEach { println(it) }
각 데이터를 나눈 나머지를 기준으로 정렬하는 코드입니다.
출력값 : 3, 1, 2
sortedDescending(), sortedDescendingBy()
위 함수는 sorted함수에서 정렬 순서가 역순인 함수입니다. 큰 수에서 작은 수 순서로, z에서 a 순서로 정렬됩니다.
'프로그래밍언어 > Kotlin' 카테고리의 다른 글
Kotlin 컬렉션 타입 (0) | 2019.08.30 |
---|---|
Kotlin 함수형 프로그래밍 - (5) 클로저 (0) | 2019.08.22 |
Kotlin 함수형 프로그래밍 - (4) 인라인 함수 (0) | 2019.08.19 |
Kotlin 함수형 프로그래밍 - (3) 고차 함수 (0) | 2019.08.18 |
Kotlin 함수형 프로그래밍 - (2) 람다 표현식 (0) | 2019.08.18 |
- Total
- Today
- Yesterday
- 스위프트
- 알고리즘
- 안드로이드
- 오토레이아웃
- Auto Layout
- ios
- 코틀린
- watchos
- SwiftUI
- databinding
- 컬렉션
- 상속
- 함수형프로그래밍
- android
- 아이폰
- retrofit
- Elliotable
- Swift
- Rxjava
- Reactive programming
- C++
- apple
- 함수형
- Notissu
- XCode
- 애플워치
- Apple Watch
- Kotlin
- CloudComputing
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |