불변 리스트(List)의 정렬

불변 리스트는 정렬 결과를 새로운 리스트로 반환합니다.

메서드 설명 예시
sorted() 기본 오름차순 정렬 list.sorted()
sortedDescending() 기본 내림차순 정렬 list.sortedDescending()
sortedBy { } 특정 기준으로 오름차순 정렬 list.sortedBy { it.length }
sortedByDescending { } 특정 기준으로 내림차순 정렬 list.sortedByDescending { it.length }
sortedWith(Comparator) 커스텀 Comparator 기준 정렬 list.sortedWith(compareBy { it.length })

불변 리스트(List) 정렬 예시

fun main() {
    val list = listOf(3, 1, 4, 2)

    val sortedList = list.sorted()
    println(sortedList)  // [1, 2, 3, 4]

    val sortedDescendingList = list.sortedDescending()
    println(sortedDescendingList)  // [4, 3, 2, 1]

    val sortedByList = list.sortedBy { -it }
    println(sortedByList)  // [4, 3, 2, 1]

    val sortedWithList = list.sortedWith(Comparator { a, b -> b - a })
    println(sortedWithList)  // [4, 3, 2, 1]
}

가변 리스트(MutableList)의 정렬

가변 리스트는 제자리에서 정렬합니다.

메서드 설명 예시
sort() 기본 오름차순 정렬 mutableList.sort()
sortDescending() 기본 내림차순 정렬 mutableList.sortDescending()
sortBy { } 특정 기준으로 오름차순 정렬 mutableList.sortBy { it.length }
sortByDescending { } 특정 기준으로 내림차순 정렬 mutableList.sortByDescending { it.length }
sortWith(Comparator) 커스텀 Comparator 기준 정렬 mutableList.sortWith(compareBy { it.length })

가변 리스트(MutableList) 정렬 예시

fun main() {
    val list = mutableListOf(3, 1, 4, 2)

    list.sort()
    println(list)  // [1, 2, 3, 4]

    list.sortDescending()
    println(list)  // [4, 3, 2, 1]

    list.sortBy { -it }
    println(list)  // [4, 3, 2, 1]

    list.sortWith(Comparator { a, b -> b - a })
    println(list)  // [4, 3, 2, 1]
}

sortedBy 와 sortedWith 의 차이?

sortedBy 는 각 원소 하나에 대해 정렬 기준 키(key)를 뽑아서 오름차순 정렬합니다.

하지만 만약 두 원소(x, y)를 서로 비교하는 방식으로 정렬 순서를 정해야 한다면, 단순히 하나의 키로는 표현할 수 없습니다.

따라서 커스텀 비교가 필요한 경우에는 sortedWith + Comparator를 써야 합니다.

예를 들어, 아래의 리스트가 있다고 가정합시다.