Вы можете использовать следующую функцию для объединения двух компараторов в компаратор пар, который сравнивает первое значение пары с первым компаратором, а затем второе значение со вторым компаратором:
fun <T, U> pairComparator(
firstComparator: Comparator<T>,
secondComparator: Comparator<U>
): Comparator<Pair<T, U>> =
compareBy(firstComparator) { p: Pair<T, U> -> p.first }
.thenBy(secondComparator) { p: Pair<T, U> -> p.second }
Затем выиспользуйте его следующим образом:
val source = listOf(1 to 2.3, 1 to 2.0, 0 to 3.0)
val result1 = source.sortedWith(pairComparator(naturalOrder(), naturalOrder()))
println(result1) // [(0, 3.0), (1, 2.0), (1, 2.3)]
val result2 = source.sortedWith(pairComparator(naturalOrder(), reverseOrder()))
println(result2) // [(0, 3.0), (1, 2.3), (1, 2.0)]
См. полный код здесь: https://pl.kotl.in/BkMOzb8CX