Today's/DevelopStory

[Kotlin] 객체 배열에서 특정 Key의 값(value)만 추출하여 배열만들기

Axis 2023. 2. 22. 18:38

코틀린에서는 map 함수와 getOrDefault 함수를 사용하여 객체 배열에서 특정 키에 해당하는 값들만 추출할 수 있다.

fun main() {
    val arr = arrayListOf(
        mapOf("a" to 1, "b" to "가", "c" to 70.5),
        mapOf("a" to 2, "b" to "나", "c" to 80.5),
        mapOf("a" to 3, "b" to "다", "c" to 90.5)
    )

    val aValues = arr.map { it.getOrDefault("a", null) }
                     .filterNotNull()
                     .toTypedArray()

    println(aValues.joinToString())
}

이 코드는 주어진 객체 배열에서 "a"라는 키에 해당하는 값들만 추출하여 배열로 만든다.

1, 2, 3

여기서 map 함수는 객체 배열 내의 모든 객체를 변환한다.
getOrDefault 함수는 객체 내에서 주어진 키에 해당하는 값을 반환하며,
만약 해당 키가 없으면 기본값인 null을 반환한다.
filterNotNull 함수는 null이 아닌 값을 가지는 객체들만 추출한다.
마지막 toTypedArray 함수는 추출한 값들을 Array Type으로 할당한다.

또는 containsKey 함수를 활용하여 다음과 같이 구현할 수도 있다.

fun main() {
    val data = arrayListOf(
        mapOf("a" to 1, "b" to "가", "c" to 70.5),
        mapOf("a" to 2, "b" to "나", "c" to 80.0),
        mapOf("a" to 3, "b" to "다", "c" to 90.5)
    )

    val aValues = data.filter { it.containsKey("a") } // "a" 키를 가진 요소들만 추출
                     .map { it.getValue("a") } // "a" 키에 해당하는 값을 추출하여 새로운 리스트를 생성
                     .toTypedArray() // 리스트를 배열로 변환

    println(aValues.joinToString()) // 배열 출력
}