kotlin

코틀린 : Collection 과 람다, 정렬

ChloeLee 2020. 10. 21. 20:01

Collection 과 람다

groupby 함수

groupby (T->R):Map

 

매개 변수가 1개이고 리턴이 있는 함수를 대입해서 리턴 값을 데이터를 분류를 해서 Map 으로 리턴해주는 함수

 

정렬

reverse, sorted, sortedBy, sortedDescending, sortedDescending

 

reverse 는 매개 변수 없이 사용해서 데이터의 순서를 반대로 만들어 줍니다.

 

sorted 는 매개 변수 없이 사용해서 데이터를 오름차순 ( 작은 것 -> 큰 것 ) 정렬해서 리턴 합니다.

데이터의 크기를 비교할 수 있는 경우에만 사용 가능

 

sortedBy 는 매개 변수가 1 개이고 리턴이 있는 함수를 대입받아서 리턴 값을 가지고 오름차순 정렬을 해서 리턴합니다.

 

null

class User(var num:Int, var name:String, var gender:String, var score:Int){}


fun main(args:Array<Sting>){
    // 데이터의 모임 생성
    var list = mutableListOf<User>()
    // 데이터 추가
    list.add(User(1, "배유나", "여자", 98))
    list.add(User(2, "한희구", "남자", 92))
    list.add(User(3, "지나연", "여자", 58))
    list.add(User(4, "배유한", "남자", 71))
    list.add(User(5, "김지아", "여자", 38))
    list.add(User(6, "한희나", "여자", 91))

    //gender를 이용해서 분류 - Map 으로 리턴
    println(list.groupBy{it.gender})
    //Map 의 데이터 확인 - key 에는 key 값이 오는 것이 value는 저장된 값입니다.
    // goup by 를 하게 되면 key 는 분류할 때 사용한 항목명이고
    // value는 항목별 리스트입니다.
    list.groupBy{it.gender}.forEach{ it:Map.Entry<String, List<User>>
        println("${it.key}:")
        print(it.value.sumBy{it.score})
        println("")
    }

    // score 의 오름차 순으로 정렬해서 name 출력
    list.sortedBy { it.score }.forEach{println(it.name)}

}