본문 바로가기
코틀린/[Ordering] 정렬 작업

[Kotlin][Collection] sortedBy / sortedByDescending

by jinwo_o 2024. 8. 23.

지정된 선택기 함수에 의해 반환된 값의 자연 정렬 순서에 따라 정렬된 모든 요소의 목록을 반환합니다.

정렬이 안정적입니다. 이는 동일한 요소가 정렬 후에도 서로 상대적인 순서를 유지함을 의미합니다.

public inline fun <T, R : Comparable<R>> Iterable<T>.sortedBy(crossinline selector: (T) -> R?): List<T> {
    return sortedWith(compareBy(selector))
}

public fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T> {
    if (this is Collection) {
       if (size <= 1) return this.toList()
       @Suppress("UNCHECKED_CAST")
       return (toTypedArray<Any?>() as Array<T>).apply { sortWith(comparator) }.asList()
    }
    return toMutableList().apply { sortWith(comparator) }
}

public actual fun <T> MutableList<T>.sortWith(comparator: Comparator<in T>): Unit {
    if (size > 1) java.util.Collections.sort(this, comparator)
}


val list = listOf("aaa", "cc", "bbbb")
val sorted = list.sortedBy { it.length }
println(sorted) // [cc, aaa, bbbb]

 

지정된 선택기 함수에 의해 반환된 값의 자연 정렬 순서에 따라 내림차순으로 정렬된 모든 요소의 목록을 반환합니다.

정렬이 안정적입니다. 이는 동일한 요소가 정렬 후에도 서로 상대적인 순서를 유지함을 의미합니다.

public inline fun <T, R : Comparable<R>> Iterable<T>.sortedByDescending(crossinline selector: (T) -> R?): List<T> {
    return sortedWith(compareByDescending(selector))
}


val list = listOf("aaa", "cc", "bbbb")
val sorted = list.sortedByDescending { it.length }
println(sorted) // [bbbb, aaa, cc]

 

sortedBy - Kotlin Programming Language

 

kotlinlang.org

 

sortedByDescending - Kotlin Programming Language

 

kotlinlang.org