비교 결과를 계산하기 위해 일련의 함수를 사용하여 비교기를 만듭니다. 함수는 순차적으로 호출되고, 주어진 값 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]
'코틀린 > [Ordering] 정렬 작업' 카테고리의 다른 글
[Kotlin][Collection] sortedWith (0) | 2024.09.05 |
---|---|
[Kotlin][Collection] sortedBy / sortedByDescending (0) | 2024.08.23 |
[Kotlin][Collection] sorted / sortedDescending (0) | 2024.08.23 |