Kotlin flatMap - 원소 값 변경 및 추가
Notepad96
·2020. 11. 27. 05:45
1. flatMap
flatMap 함수는 map 함수와 유사한 동작을 한다.
map을 사용하여 조건에 따라 값을 변경하였다면 flatMap 함수 또한 값을 변경할 수도 있으며, 이에 더하여 여러 개의 값을 추가할수도 있다.
따라서 flatMap을 사용하면 어느 값을 분리해서 만들어진 여러 개의 값들을 삽입한 리스트를 만들어 낼 수도 있다.
2. 코 드
환경 : Kotlin Version = 1.4.20, JVM
fun main(args: Array<String>) {
println("===================LIST=======================")
val ml = mutableListOf(5, 4, 1, 2, 3, 6)
println("1. List : $ml")
val ml2 = ml.flatMap { if(it % 2 == 0) listOf(it, it*it) else listOf(it) } // 짝수라면 그 뒤에 제곱의 수를 넣는다.
println("2. List : $ml2")
val ml3 = ml.flatMap { if(it % 2 == 1) listOf(it, it*it, it*it*it) else listOf(it) }
println("3. List : $ml3")
println("===================SET=======================")
val ms = mutableSetOf("123", "234", "345", "567")
println("1. Set : $ms")
val ms2 = ms.flatMap { it.toList() }.toSet() // 문자열을 List로 만듬으로써 각 문자로 나눈다.
println("2. Set : $ms2")
val temp = ms.map { it.toList() }.toSet()
println("0. Temp : $temp")
println("===================MAP=======================")
val mm = mutableMapOf(1 to "eqr", 2 to "dfg", 3 to "qwe", 4 to "xzc")
println("1. Map : $mm")
val mm2 = mm.flatMap { if(it.key > 2) it.value.toList() else listOf() }
println("2. Map->List : $mm2")
}
- 리스트에서 홀수일 경우 그대로, 짝수일 경우 해당 수와 그 뒤에 제곱한 수를 삽입한 형태의 리스트를 구하였다.
마찬가지로 짝수일 경우 그대로, 홀수일 경우 해당 수, 제곱 수, 세제곱 수를 삽입한 형태의 리스트를 구하였다.
- 문자열들을 저장한 Set의 문자열을 toList 함수를 사용하여 각 문자로 이루어진 List로 만든다.
이렇게 구한 문자 List를 삽입함으로써 각 숫자 문자열에서 사용한 숫자들을 구할 수 있다.
또한, 결과로서 얻은 것은 List 형태이므로 Set형태로 바꾸어 준다면 중복된 원소도 제거된다.
※ flatMap vs. map
결과에 있는 temp는 flatMap이 아닌 map을 사용하였을 경우이다.
출력된 형태를 보면 flatMap과는 다르게 리스트 자체가 들어간 리스트의 형태가 된것을 볼 수 있다.
flatMap의 경우에는 리스트의 각 원소가 들어간 하나의 리스트로 반환해준다는 것을 알 수 있다.
- Map 또한 Key와 Value의 관하여 값을 변경할 수도 있으며 이들을 이용하여 다수의 원소를 추가할 수 있다.
단, 반환 타입은 List 형이다.
3. 참 조
'Kotlin > Collections' 카테고리의 다른 글
Kotlin joinToString - List 문자열 변환 List to String (0) | 2020.11.28 |
---|---|
Kotlin zip - List 묶기 (0) | 2020.11.27 |
Kotlin partition - 조건에 따라 2개로 분리하기 (0) | 2020.11.26 |
Kotlin count - 조건에 만족하는 원소 개수 (0) | 2020.11.26 |
Kotlin find, findLast - 특정 원소 찾기(탐색) (0) | 2020.11.26 |