例えば、次のようなクラスがあり、そのインスタンスを生年月日でソートしたい場合。
data class Person(
val name: String,
val birthYear: Int,
val birthMonth: Int,
val birthDayOfMonth: Int
)
次のように Comparator
を生成すればよい。
val birthDateComparator: Comparator<Person> =
compareBy<Person> { it.birthYear }
.thenBy { it.birthMonth }
.thenBy { it.birthDayOfMonth }
使用例:
fun main() {
listOf(
Person("Alice", 2000, 1, 1),
Person("Bob", 2000, 1, 2),
Person("Carol", 2001, 1, 1)
)
.shuffled()
.sortedWith(birthDateComparator)
.map { it.name }
.also {
println(it) // > [Alice, Bob, Carol]
}
}
別の書き方:
val birthDateComparator: Comparator<Person> =
Comparator<Person> { a, b -> a.birthYear.compareTo(b.birthYear) }
.thenComparator { a, b -> a.birthMonth.compareTo(b.birthMonth) }
.thenComparator { a, b -> a.birthDayOfMonth.compareTo(b.birthDayOfMonth) }