ガマグレート:
私が使ってきたsortedWithとcompareBy前にメソッドを、それが複数のパラメータを使用してソートすることができます。
私はまた、使用されてきたnullsLastの前に方法を、それだけで、他の2のように非常に便利です。
これらの方法では、しかし、私は次の並べ替えの規則でコレクションをソートする方法を把握することはできません。
クラスを考えます:
data class MyClass(
val varA: String?,
val varB: String
)
ソートによるとVARA最後であることを、アルファベット順とヌル/空白。それから
ソートによるとVARBアルファベット順
それでは、私は、次のコレクションを持っているとしましょう:
val collection = listOf(
MyClass(null, "A"),
MyClass("a", "B"),
MyClass("c", "C"),
MyClass("b", "D"),
MyClass("", "E"),
MyClass("a", "F"),
MyClass("b", "G"),
MyClass(null, "H"),
MyClass("", "I")
)
それは、その後にソートする必要があります。
MyClass("a", "B")
MyClass("a", "F")
MyClass("b", "D")
MyClass("b", "G")
MyClass("c", "C")
MyClass(null, "A")
MyClass("", "E")
MyClass(null, "H")
MyClass("", "I")
私は同じように使用できるワンライナーのコードがあるcompareBy使用して可変引数パラメータは、
アレクセイ・ロマノフ:
私は(参照、このようにそれを行うだろうkotlin.comparisons
マニュアルを参照して):
val comparator = compareBy<String, MyClass>(nullsLast(), { it.varA.let { if (it == "") null else it } }).thenBy { it.varB }
collection.sortedWith(comparator)