중첩된 컬렉션을 푸는 메소드로 flatMap, flatten이 있습니다
flatten은 자바의 그것과 같고요, flatMap은 map + flatten 입니다. 그렇다면 이름을 mapFlat으로 지어야 하는게 아닌가 싶지만 ㅋㅋ flatMap이라는걸로 쓰도록 약속된 것 같습니다
아무튼 두 메소드를 적절히 사용하면 컬렉션을 편하게 다룰 수 있습니다
data class Book(val title: String, val authors: List<String>)
val books = listOf(
Book("날개", listOf("이상")),
Book("태평천하", listOf("채만식")),
Book("탁류", listOf("채만식")),
Book("대한독립선언서", listOf("조소양", "이승만", "김좌진", *others.toTypedArray())),
)
println(books.flatMap { it.authors }.toSet())
flatMap은 인자로 주어진 람다를 컬렉션의 모든 객체에 적용(map)하고, 결과를 한 리스트로 모읍니다 (flatten)
val nestedList = listOf(
listOf("a", "b"),
listOf("c", "d"),
)
println(nestedList.flatten()) // ["a", "b", "c", "d"]
map을 안써도 된다면 flatten 메소드를 사용합니다
주의할 점은 한 depth만 되고, 여러번 중첩된 컬렉션을 1차원 배열로 평평하게 만들려면 직접 구현해줘야 합니다 (ex. https://stackoverflow.com/a/63114245/4295499)
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] spring initializr 이용시 'Unresolved reference: snippetsDir' 해결방법 (0) | 2022.07.24 |
---|---|
[Kotlin] Scope function (범위 함수) (0) | 2022.04.03 |
[Kotlin] groupBy (0) | 2022.04.02 |
[Kotlin] count, size 함수 (kotlin in action) (0) | 2022.04.02 |
[Kotlin] 람다 (lambda) (0) | 2022.03.27 |