코틀린

[Youtube DiMo] 27-28강. 컬렉션 함수

iseohyun 2022. 5. 3.

목차

     

    [27강] https://youtu.be/6iZDjLvhMN8

    [28강] https://youtu.be/pFk72oghDLo

     

     

    1. 컬렉션 함수

    문법 :
    컬렉션명.forEath{바디}

    반환값이 true/false인 경우
    컬렉션명.any{바디} ==> OR : 하나라도 참이면
    컬렉션명.all{바디} ==> AND : 모두 참이면
    컬렉션명.none{바디} ==> !AND : 모두 참이 아니면

    검색값 반환
    컬렉션명.first{바디}
    컬렉션명.last{바디}
    컬렉션명.count{바디}
    ※ 컬렉션명.firstOrNull{바디} : 조건 검색값이 없을 때, Exception을 발생하므로 Null을 반환할 수 있도록 사용
    lastOrNull


    https://www.tutorialkart.com/kotlin/kotlin-list-foreach-example/

    fun main() {
        val names = listOf<String>("박수영", "김지수", "김다현", "신유나", "김지우")
        names.forEach{ print(it + " ") }
        println()
        
        println(names.filter{ it.startsWith("김")})
        
        println(names.any{ it == "김지연" }) // '김지연'이 있나? ==> No
        println(names.all{ it.length == 3}) // 모두 {이름이 3글자?} ==> Yes
        println(names.none{ it.startsWith("이")}) // 없나? {성이 '이'씨} ==> Yes
        
        println(names.first{ it.startsWith("김") }) // 처음{성이 '김'씨} ==> "김지수"
        println(names.last{ it.startsWith("김") }) // 마지막{성이 '김'씨} ==> "김지우"
        println(names.count{ it.startsWith("김") }.toString() + "명") // 갯수{성이 '김'씨} ==> 3 명
        
        println(names.firstOrNull{ it.startsWith("이") }) // 처음{성이 '이'씨} ==> null(없음)
        println(names.lastOrNull{ it.startsWith("이") }) // 마지막{성이 '이'씨} ==> null(없음)
    }
    박수영 김지수 김다현 신유나 김지우 
    [김지수, 김다현, 김지우]
    false
    true
    true
    김지수
    김지우
    3명
    null
    null

     

    2. associateBy, groupBy, partition

    fun main() {
        data class Person(val name: String, val birthYear: Int)
        
        val personList = listOf(Person("유나", 1999),
                                Person("조이", 1986),
                                Person("츄", 1999),
                                Person("유나", 2003))
        
        println("원본 : " + personList)
        
      	println(" * associateBy 예) 출생연도로")
        println(personList.associateBy{it.birthYear}) // MAP으로 반환 : {}
        personList.associateBy{it.birthYear}.forEach{k,v -> print(k.toString() + "=" + v.name + " ")}
        println()
    
        println(" * groupBy 예) 이름으로") // MAP으로 반환 : {} 내부에 리스트 []
        println(personList.groupBy{it.name})
        personList.groupBy{it.name}.forEach{k,v -> 
            print(k + "=[")
            v.forEach{
                print("${it.birthYear} ")
            }
            print("] ")
        }
        println()
    
        println(" * partition 리스트") // List로 반환 : {} 내부에 리스트 []
        val(p1, p2) = personList.partition { it.birthYear > 1998 }
        
        println(p1)
        println(p2)
    }
    원본 : [Person(name=유나, birthYear=1999), Person(name=조이, birthYear=1986), Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]
     * associateBy 예) 출생연도로
    {1999=Person(name=츄, birthYear=1999), 1986=Person(name=조이, birthYear=1986), 2003=Person(name=유나, birthYear=2003)}
    1999=츄 1986=조이 2003=유나 
    
     * groupBy 예) 이름으로
    {유나=[Person(name=유나, birthYear=1999), Person(name=유나, birthYear=2003)], 조이=[Person(name=조이, birthYear=1986)], 츄=[Person(name=츄, birthYear=1999)]}
    유나=[1999 2003 ] 조이=[1986 ] 츄=[1999 ] 
    
     * partition 리스트
    [Person(name=유나, birthYear=1999), Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]
    [Person(name=조이, birthYear=1986)]

     

    3. flatMap, getOrElse, zip

    fun main() {
        var objects = listOf("객체1", "객체2", "객체3")
        
        println(objects.flatMap { listOf(it + "-1", it + "-2")})
        
        println(objects.getOrElse(0){"없음"})
        println(objects.getOrElse(3){"없음"})
        
        val names = listOf("A", "B", "C", "D", "E")
        
        println(objects zip names)
    }
    [객체1-1, 객체1-2, 객체2-1, 객체2-2, 객체3-1, 객체3-2]
    객체1
    없음
    [(객체1, A), (객체2, B), (객체3, C)]

    '코틀린' 카테고리의 다른 글

    [Youtube DiMo] 30강. 비트연산  (0) 2022.05.03
    [Youtube DiMo] 29강. 변수  (0) 2022.05.03
    [Youtube DiMo] 26강. Set / Map  (0) 2022.05.03
    [Youtube DiMo] 25강. Data / Enum  (0) 2022.05.03
    [Youtube DiMo] 24강. 내부클래스  (0) 2022.04.30

    댓글