개발(Android)/kotlin syntax

[Kotlin syntax] Collection Functions (1)

shinyelee 2022. 4. 9. 18:30

[코틀린 문법] 컬렉션 함수 (1)

forEach, filter, map, any, all, none, first/find, last/findLast, count

// Collection Function(컬렉션 함수) //

// list, set, map 같은 컬렉션 또는 배열에 일반 함수 또는 람다 함수 형태를 사용해
// for문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 여러가지 함수
// 반복문 및 조건문 대체 가능

fun main () {

    val nameList = listOf("최연준", "최수빈", "최범규", "강태현", "휴닝카이")

    // forEach //
    // 전체 반환
    nameList.forEach {print(it + " ")}
    println()
//    최연준 최수빈 최범규 강태현 휴닝카이

    // filter //
    // 조건에 맞는 객체만 반환
    println(nameList.filter{it.startsWith("강")})
//    [강태현]

    // map //
    // 수식 일괄 적용해 반환
    println(nameList.map{"이름 : "+it})
//    [이름 : 최연준, 이름 : 최수빈, 이름 : 최범규, 이름 : 강태현, 이름 : 휴닝카이]

    // any //
    // 하나라도 조건에 맞으면 true
    println(nameList.any{it == "휴닝바히에"})
//    false

    // all //
    // 모두 조건에 맞으면 true
    println(nameList.all{it.length == 3})
//    false

    // none //
    // 하나라도 조건에 맞지 않으면 true
    println(nameList.none{it.startsWith("김")})
//    true

    // first 또는 find //
    // 첫 번째 객체 반환
    // 조건 걸면 조건에 맞는 첫 번째 객체 반환
    println(nameList.first{it.startsWith("최")})
//    최연준

    // last 또는 findLast //
    // 마지막 객체 반환
    // 조건 걸면 조건에 맞는 마지막 객체 반환
    println(nameList.last{it.startsWith("최")})
//    최범규

    // first, last 쓸 때 조건에 맞는 객체 없으면 NoSuchElementException 발생생
    // -> firstOrNull, lastOrNull 사용하면 해당 객체 없을 때 null 반환

    // count //
    // 아이템 개수 반환
    // 조건 걸면 조건에 맞는 아이템 개수 반환
    println(nameList.count{it.contains("수")})
//    1

}

filter 보충설명

fun main() {

    // 필터
    val testList4 = listOf("student1","student2","student3","student4","teacher1","student5")
    println(testList4)
    println(testList4.filter { it.startsWith("s") })
//    [student1, student2, student3, student4, teacher1, student5]
//    [student1, student2, student3, student4, student5]
    
    // 리스트에 null 있을 때
    val testList5 = listOf("student1","student2","student3","student4","teacher1","student5",null)
    println(testList5)
//    [student1, student2, student3, student4, teacher1, student5, null]
    
    // 잘못된 필터링(null 포함)
//    println(testList5.filter { it.startsWith("s") })
    // Kotlin: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
    
    // 올바른 필터링(null 제외)
    println(testList5.filterNotNull().filter { it.startsWith("s") })
//    [student1, student2, student3, student4, student5]

}
fun main() {

    // 필터
    val testList2 = listOf("john", "jay", "minsu", "minji", "suji", )

    val result1 = testList2.filter {
        it.startsWith("m")
    }
    println(result1)
//    [minsu, minji]

    val testList3 = listOf(1, 2, 3, 4, 5)

    val result2 = testList3.filter {
        // 글자수를 2로 나눴을 때 나머지가 0인 이름
        // 즉 글자수가 짝수인 경우만 출력
        it % 2 == 0
    }
    println(result2)
//    [2, 4]

    val testList4 = listOf("a", "aa", "aaa", "aaaa")

    val result3 = testList4.groupBy {
        // 글자수가 2 초과면 true로 묶고
        // 글자수가 2이하면 false로 묶음
        it.length > 2
    }
    println(result3)
//    {false=[a, aa], true=[aaa, aaaa]}

}

참고

 

[입문편] 안드로이드를 위한 코틀린(Kotlin) 문법 - 인프런 | 강의

코틀린 문법 기초 강의입니다. 안드로이드 앱을 코틀린 언어로 개발하고 싶으신 분들을 위한 강의이고, 기초부터 튼튼하게 코틀린 문법을 재미있게 공부할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

반응형