Вы можете использовать рефлексию и некоторые простые языковые функции, например:
inline fun <reified T : Any> compareByAll(): Comparator<T> {
val selector = T::class.memberProperties
.map { { i: T -> it.get(i) as Comparable<*> } }
.toTypedArray()
return compareBy(*selector)
}
Используется так:
val testInput = listOf(I(1, 2, 3), I(1, 2, 4), I(1, 0, 4), I(2, 3, 4), I(0, 1, 2)
testInput.sortedWith(compareByAll()))
Обратите внимание, что это решение не обрабатывает случай, когда свойствоне Comparable
.