본문 바로가기
코틀린 문법

19. 컬렉션함수(1)

by 농농씨 2023. 6. 3.

참조: 유튜브 디모의 코틀린

코드테스트사이트:play.kotlinlang.org

단축키(맥북):

맥북 스크린샷 바로 클립보드에 붙여넣기

-control+command+shift+3 or 4(3은 전체화면, 4는 마우스로 지정한 영역, 4일때 스페이스바 누르면 창캡처가능)

화면에 분할해놓은 창끼리 이동

-command+'

한 창에서 탭끼리 이동

-command+shift+{/}

 

//여태까지 우리는 컬렉션을 for문으로 반복하여 포함된 아이템을
//하나하나 꺼내 사용했었다
//ex. for(item in collection)
//하지만 코틀린은 '함수형 언어'의 특징을 가지고 있기 때문에 좀 더
//편리하게 컬렉션을 사용할 수 있다.-->'컬렉션 함수'
//컬렉션함수
//:list나 set, map과 같은 컬렉션 또는 배열에 일반함수 또는
//람다함수 형태를 사용하여 for문 없이도 아이템을 순회하며 참조하거나 
//조건을 걸고, 구조의 변경까지 가능한 여러가지 함수를 지칭함
//컬렉션 함수의 동작 예)
//<forEach
//ex. collection.forEach{
// println(it)
//   } //중괄호 안에서 컬렉션에 포함된 모든 아이템을 
//      'it'이라는 변수로 순서대로 참조할 수 있다
//이렇게 단순히 반복만하는 함수도 있지만 '특정한 조건'을 걸 수도 있다.
//<filter
//ex. collection.filter{
// it<4
//    }//중괄호 안에서 it에 조건을 걸어주면 조건에 맞는 객체만
//    다시 컬렉션으로 만들어서 반환함
//    예를들어 1,3,5,7 중 1,3만 선택
//<map
//ex. collection.map{
// it*2
//    } //중괄호 안에서 it에 수식을 적용하여 값을 변경하면
//    그 값을 컬렉션으로 만들어 반환함
//    예를들어 1,2,3,4면 2,4,6,8로 만들어 반환
//    일괄적인 값 변경 가능
//<any, all, none
//ex.collection.any{it==0} //하나라도 조건에 맞으면 true
// collection.all{it==0} //모두 조건에 맞으면 true
// collection.none{it==0} //하나도 조건에 맞지 않으면 true
//<first
//ex. collection.first()
// //일반함수로 사용하는 경우 첫번째 객체를 반환
//   collection.first{it>3}
//     //람다함수 형태로 중괄호 안에 it에 조건을 걸어주면
//     조건에 맞는 첫번째 아이템을 반환
//<last
//ex. collection.last{it>3}
// //조건에 맞는 마지막 아이템을 반환
//대체 가능
//first->fine
//last->findLast
//first와 last함수 사용할때 문제 생길 수 있음
//->조건에 맞는 객체가 없는 경우(=(반환할?)컬렉션이 비어있는 경우)
//==>NoSuchElementException 발생
//이때 firstOrNull, lastOrNull 쓰면
//객체가 없는 경우 'null' 반환
//<count
//ex. collection.count()
// //일반함수처럼 사용하면 컬렉션의 모든 아이템의 개수 반환
//    collection.count{it>7}
//     //중괄호와 함께 it에 조건 걸어서 람다함수처럼 사용
//       조건에 맞는 아이템의 개수 반환
//
//컬렉션 함수를 사용하면 반복문과 조건문을 대부분 대체할 수 있다는 장점


fun main(){
    
    val nameList = listOf("박수영","김지수","김다현","신유나","김지우")
     //여러 이름 들어간 문자열 리스트 만듦
    
    nameList.forEach{print(it+" ")}
    println()//한줄 띄어주는 것 잊지 마세요!
    //forEach를 통해 아이템을 차례로 표시함
    
    println(nameList.filter{it.startsWith("김")})
    //filter를 걸어서 김씨 성을 가진 사람만
    //startsWith()함수를 사용하여 별도의 리스트로 만들어 출력
    
    println(nameList.map{"이름:"+it})
    //map함수 사용하여 각각의 이름앞에 이름과 콜론을 붙인 리스트 만들어 출력
    
    println(nameList.any{it=="김지연"})
    //any사용하여 김지연이라는 이름 가진 사람 하나라도 있는지 boolean값으로출력
    println(nameList.all{it.length==3})
    //all사용하여 이름 모두 세글자인지 boolean값으로 출력
    println(nameList.none{it.startsWith("이")})
    //none사용하여 이씨성을 가진사람 하나도 없는지 boolean값으로 출력
    
    println(nameList.first{it.startsWith("김")})
    //first에서 김씨성을 가진 첫번째 사람 반환받아 출력
    println(nameList.last{it.startsWith("김")})
    //last에서 김씨성 가진 마지막 사람 반환받아 출력
    println(nameList.count{it.contains("지")})
    //count함수 사용하여 이름에 "지" 들어가는 사람 셈
    
}

//컬렉션 함수는 람다함수를 사용하여 컬렉션을 좀 더 편리하게 조작할 수 있는 
//장점을 가진 함수
//경우에따라 반복문과 조건문 대신 사용하면 편리하다.


























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

21. 변수의 다양한 사용방법  (0) 2023.06.03
20. 컬렉션함수(2)  (0) 2023.06.03
18. Set과 Map  (0) 2023.05.31
17. Data Class와 Enum Class  (1) 2023.05.14
16. 중첩클래스와 내부클래스  (0) 2023.05.14