Kotlinの利用できる便利なメソッドを使用して終わりに複数の値とNULLでコレクションを並べ替える方法

ガマグレート:

私が使ってきたsortedWithcompareBy前にメソッドを、それが複数のパラメータを使用してソートすることができます。

私はまた、使用されてきた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)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=33583&siteId=1