1. ホーム
  2. generics

[解決済み] KotlinのPair用コンパレータ

2022-02-18 04:01:29

質問

Kotlinで特殊な型のためのコンパレータを書くことができます。
class Comparator() : kotlin.Comparator<Pair<Double, Int>>
しかし、Comparable<...> を拡張するすべての可能な型に対してジェネリックスを使ってコンパレータを書くにはどうしたらよいでしょうか。

解決方法は?

コンパレータを作成するには、補助関数を使用します。 compareBy , compareByDescending , naturalOrder , reverseOrder https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.comparisons/index.html

例えば

val map = mapOf<Int, String>()
// ... add values to the map
val sortedMap: SortedMap<Int, String> = map.toSortedMap(compareByDescending { it })

そして、あなたの場合。

val comparator = compareBy<Pair<Double, Int>> { it.first }

カスタムコンパレータです。

class CustomComparator<T: Comparable<T>> : Comparator<T> {
    override fun compare(o1: T, o2: T): Int {
        return o1.compareTo(o2)
    }
}