본문 바로가기
Android 개발/Kotlin

Kotlin Pair 와 Map 함수 이용해서 데이터 가공하기

by Developer88 2023. 4. 26.
반응형

오늘은 Kotlin 에서 Pair()와 Map() 함수를 이용하는 방법에 대해서 정리해 보겠습니다.

 

1. Pair 데이터

먼저 아래와 같은 Pair()객체를 list 에 여러개 있다고 가정해 보겠습니다.

 

val testList = listOf(Pair("one", 1), Pair("two", 2), Pair("three", 3))

 

참고로 to 키워드를 사용하면 Pair()생성자 형태를 사용하지 않고도 Pair 객체를 만들수 있습니다.

Kotlin에 있는 infix함수라는 개념인데, 보통 사용하는 점(.)이나 괄호() 를 사용하지 않고 함수를 호출하게 해줍니다.

 

val testList = listOf("one" to 1, "two" to 2, "three" to 3)

 

 

 

실제 앱을 만들때는 이렇게 사용되는 경우가 있을 수 있겠습니다.

 

val arguments: List<Pair<String, NavType<*>>> =
	listOf(
            "data" to NavType.StringType,
            "id" to NavType.IntType
        )

 

2. Map 함수로 데이터 가공하기

 

리스트를 가공해서 어떠한 데이터를 만들어 내려할 때는,

Kotlin의 Collection transformation operator 중 하나인 map 함수를 쓰게 되는데요.

아래는 공식 문서의 Map함수에 대한 설명입니다.

 

 

이제 위에서 만들었던 Pair 데이터를 가지고,

map함수를 이용해 가공해 보겠습니다.

 

람다함수에서,

첫번째와 두번째 인자에 각각 name과 type이라는 이름을 붙여서 받아와서,

String으로 변화해 분여서 출력해 보았습니다.

 

val sampleList = listOf("one" to 1), ("two" to 2), ("three" to 3))

val transformedList = sampleList.map { (name, type) ->
    name + type.toString()
}

println(transformedList)
// 결과: ["one1", "two2", "three3"]

 

 

 

이를 응용해서 실제 사례에서는 아래와 같이 사용하는 경우가 있을 것 같습니다.

 

...
object TestScreen: TestScreenNavEvent(
    SharedRoutes.TestScreen.route + "/from_test_screen/{data}/{id}",
    listOf(
        "data" to NavType.StringType,
        "id" to NavType.IntType
        )
)
fun generateRoutes(argumentsMap: Map<String, Any>): String {
    var resultRoute = route
    argumentsMap.forEach { (routeSymbol, data) ->
        resultRoute = resultRoute.replace("{$routeSymbol}", data.toString())
    }
    return resultRoute
}
...

 

이상으로 Kotlin Pair 와 Map 함수를 이용해서 데이터 가공하는 방법과 사례에 대해서 정리해 보았습니다.

 

728x90

댓글