[Kotlin] flatten문법

WonDDak·2024년 3월 27일
0

Kotlin

목록 보기
1/1
post-custom-banner

이런 형태의 코드가 있다하자

data class User(
	val name :String,
   	val age :Int
)

val data :Map<String,List<User>> = mapOf(
    "1" to listOf(User("유저1",23),User("유저2",24)),
    "2" to listOf(User("유저3",27),User("유저7",21),User("유저8",21)),
    "3" to listOf(User("유저4",24),User("유저6",21)),
)

이런 경우에 data.value인 List<(User)>를 하나의 리스트로 묶으려면 다음과 같이 하는것이 일반 적일 것이다.

val allUserList = arrayListOf<User>().also { arr ->
    data.forEach {
        arr.addAll(it.value)
    }
}

그런데 Kotlin에서 이를 지원해주는 flatten이라는 문법이있다.
(단조롭게 하다라는뜻을 가지고있다.)

/**
 * Returns a single list of all elements from all collections in the given collection.
 * @sample samples.collections.Iterables.Operations.flattenIterable
 */
public fun <T> Iterable<Iterable<T>>.flatten(): List<T> {
    val result = ArrayList<T>()
    for (element in this) {
        result.addAll(element)
    }
    return result
}

코드를 보면 2차원배열을 1차원배열로 바꿔주는 좋은 친구이다.

즉 아래와 같이

    val allUserList = data.values.flatten()

사용해도 동일한 경과를 만들어낸다.

profile
안녕하세요. 원딱입니다.
post-custom-banner

0개의 댓글