버튼 수집상

[Kotlin] List.flatMap 리스트 고차함수 본문

TIL - Kotlin

[Kotlin] List.flatMap 리스트 고차함수

cocokaribou 2023. 1. 30. 16:01
class Tester(
    val title : String, 
    val list: List<String>
)

class Category(
    val cateNm: String,
    val goodsList: List<Goods>
)
class Goods(
    val goodsNm: String,
    val tagList: List<String>
)
fun main() {
    // 2차원 리스트
    val list2d : List<Tester> = listOf(
        Tester(title = "1", list = listOf("이것을", "지금부터")), 
        Tester(title = "2", list = listOf("하나의", "리스트로", "쭈우욱")),
        Tester(title = "3", list = listOf("뽑을", "것입니다."))
    )

    val flatten : List<String> = list2d.flatMap {
        // flatMap 블락 마지막 줄은 List<String>
        it.list.map { it + " " }
    }

    flatten.forEach {
        print(it)
    }
    println()


    // 3차원 리스트
    val cateList = listOf(
        Category(
            cateNm = "1",
            goodsList = listOf(
                Goods(
                    goodsNm = "goods1",
                    tagList = listOf("tag1", "tag2", "tag3")
                ),
                   Goods(
                    goodsNm = "goods2",
                    tagList = listOf("tag4", "tag5")
                )
            )
        ),
        Category(
            cateNm = "2",
            goodsList = listOf(
                Goods(
                    goodsNm = "goods3",
                    tagList = listOf("tag6", "tag7", "tag8", "tag9")
                ),
                Goods(
                    goodsNm = "goods4",
                    tagList = listOf<String>()
                )
            )
        ),
        Category(
            cateNm = "3",
            goodsList = listOf(
                Goods(
                    goodsNm = "goods4",
                    tagList = listOf("tag10", "tag11")
                )
            )
        )
    )


    val tagListMerged: List<String> = 
        cateList.flatMap{ cate ->
            cate.goodsList.flatMap { goods ->
                goods.tagList.map { it + " "} 
            }
        }

    tagListMerged.forEach { tags ->
        print(tags)
    }
}

코드 돌려보기

 

728x90