我们希望按三个不同的标准对对象进行排序,优先级较高的标准会覆盖下一个):
例子:
排序:
我们通过以下方式返回列表:
list.sortedWith(statusComparator.thenBy { it.sort }
缺少的是对 time = null 的项目进行排序。如何将 time = null 的项目排序到顶部并保持其余排序不变?
要根据值是否为 null 进行排序,我们可以...正是这样做,通过检查它是否为 null 进行排序:
list.sortedWith(
statusComparator
.thenBy { it.time != null }
.thenBy { it.sort }
)
Run Code Online (Sandbox Code Playgroud)
它有效,因为false被认为小于true。它返回true任何非空值,因此所有非空值都被认为是相同的。
我们可以加入time并sort单步进入一个,如果time为 null,则返回 null,sort否则:
.thenBy { item -> item.time?.let { item.sort } }
// or:
.thenBy { if (it.time == null) null else it.sort }
Run Code Online (Sandbox Code Playgroud)
它的性能可能会更高一些,但我认为这更难理解并且不太灵活。