코딩테스트(Kotlin)

[Kotlin] List 정렬방법 정리

YJ_Lee 2022. 11. 1. 21:58

원시 타입의 정렬

val list = arrayListOf(3, 1, 2)
list.sort()
println(list.joinToString(" "))
list.sortByDescending { it }
println(list.joinToString(" "))

val list2 = arrayListOf("ccc", "aab", "aaa")
list2.sort()
println(list2.joinToString(" "))
list2.sortByDescending { it }
println(list2.joinToString(" "))
1 2 3
3 2 1
aaa aab ccc
ccc aab aaa

 

사용자 정의 객체의 정렬 

fun main() {
    val list = arrayListOf(
        Student("Lee", 30),
        Student("Kim", 10),
        Student("Park", 20)
    )

    list.sortBy { it.age } // age 필드를 기준으로 정렬
    println(list.joinToString(" "))
    list.sortByDescending { it.age }
    println(list.joinToString(" "))
}

data class Student(val name: String, val age: Int) {
    override fun toString(): String {
        return "($name, $age)"
    }
}
(Kim, 10) (Park, 20) (Lee, 30)
(Lee, 30) (Park, 20) (Kim, 10)

 

여러 정렬조건 적용

sortWith()는 Comparator를 인수로 받아 정렬해주는 메서드

compareBy는 Comparator를 생성해주며,

compareBy { ... }.thenBy { ... }.thenByDecending{ ... } 과 같이 여러 조건을 붙여 체이닝 형태로 Comparator를 생성 가능

(매우 유용함)

fun main() {
    val list = arrayListOf(
        Student("Lee", 30),
        Student("Kim", 30),
        Student("Park", 20)
    )

    list.sortWith(compareBy<Student> { it.age }.thenBy { it.name })
    // age로 오름차순 정렬. age가 같으면 name으로 오름차순 정렬
    println(list.joinToString(" "))
}

data class Student(val name: String, val age: Int) {
    override fun toString(): String {
        return "($name, $age)"
    }
}
(Park, 20) (Kim, 30) (Lee, 30)