我之前使用过sortedWith 和compareBy 方法,它能够使用多个参数进行排序。
我之前也用过nullsLast方法,和其他两个一样方便。
但是,使用这些方法,我想不出一种方法来使用以下排序规则对集合进行排序:
给定类:
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")
有没有我可以使用的单行代码,就像使用 vararg 参数的 compareBy
最佳答案
我会这样做(参见 kotlin.comparisons
documentation ):
val comparator = compareBy<String, MyClass>(nullsLast(), { it.varA.let { if (it == "") null else it } }).thenBy { it.varB }
collection.sortedWith(comparator)
关于android - 如何使用 Kotlin 可用的便捷方法按多个值和末尾的空值对集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60541834/