비교 결과를 계산하기 위해 일련의 함수를 사용하여 비교기를 만듭니다. 함수는 순차적으로 호출되고, 주어진 값 a 와 b 를 수신하고 Comparable 객체를 반환합니다. a 및 b 값에 대해 함수에서 반환된 Comparable 인스턴스가 동일한 것으로 비교되지 않으면 해당 비교 결과가 Comparator 에서 반환됩니다.
public fun <T> compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator<T> {
    require(selectors.size > 0)
    return Comparator { a, b -> compareValuesByImpl(a, b, selectors) }
}
private fun <T> compareValuesByImpl(a: T, b: T, selectors: Array<out (T) -> Comparable<*>?>): Int {
    for (fn in selectors) {
        val v1 = fn(a)
        val v2 = fn(b)
        val diff = compareValues(v1, v2)
        if (diff != 0) return diff
    }
    return 0
}
val list = listOf("aa", "b", "bb", "a")
val sorted = list.sortedWith(compareBy({ it.length }, { it }))
println(sorted) // [a, b, aa, bb]
compareBy - Kotlin Programming Language
kotlinlang.org
'코틀린 > [Ordering] 정렬 작업' 카테고리의 다른 글
| [Kotlin][Collection] sortedWith (0) | 2024.09.05 | 
|---|---|
| [Kotlin][Collection] sortedBy / sortedByDescending (0) | 2024.08.23 | 
| [Kotlin][Collection] sorted / sortedDescending (0) | 2024.08.23 |