원시 타입의 정렬
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)