thenBy所在位置是kotlin.comparisons.thenBy,其相關用法介紹如下。

用法一

inline fun <T> Comparator<T>.thenBy(
    crossinline selector: (T) -> Comparable<*>?
): Comparator<T>

在主比較器將它們定義為相等之後,創建一個比較器比較值。它使用該函數將值轉換為 Comparable 實例以進行比較。

例子:

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
val list = listOf("aa", "b", "bb", "a")

val lengthComparator = compareBy<String> { it.length }
println(list.sortedWith(lengthComparator)) // [b, a, aa, bb]

val lengthThenString = lengthComparator.thenBy { it }
println(list.sortedWith(lengthThenString)) // [a, b, aa, bb]
//sampleEnd
}

輸出:

[b, a, aa, bb]
[a, b, aa, bb]

用法二

inline fun <T, K> Comparator<T>.thenBy(
    comparator: Comparator<in K>, 
    crossinline selector: (T) -> K
): Comparator<T>

在主比較器將它們定義為相等之後,創建一個比較器比較值。它使用 selector 函數來轉換值,然後將它們與給定的 comparator 進行比較。

例子:

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
val list = listOf("A", "aa", "b", "bb", "a")

val lengthComparator = compareBy<String> { it.length }
println(list.sortedWith(lengthComparator)) // [A, b, a, aa, bb]

val lengthThenCaseInsensitive = lengthComparator
    .thenBy(String.CASE_INSENSITIVE_ORDER) { it }
println(list.sortedWith(lengthThenCaseInsensitive)) // [A, a, b, aa, bb]
//sampleEnd
}

輸出:

[A, b, a, aa, bb]
[A, a, b, aa, bb]