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

[Kotlin][Comparator] compareBy

by jinwo_o 2024. 9. 5.

비교 결과를 계산하기 위해 일련의 함수를 사용하여 비교기를 만듭니다. 함수는 순차적으로 호출되고, 주어진 값 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