为什么 Kotlin sortBy() 似乎以相反的顺序运行?

当我执行:


val array = arrayListOf<String?>(null, "hello", null)

array.sortBy { it == null }

println(array)

我希望它会null首先打印值,因为这是我指定的选择器。但是,println(array)返回[hello, null, null].


为什么是这样?


慕侠2389804
浏览 155回答 2
2回答

POPMUISE

表达方式:it&nbsp;==&nbsp;null返回Boolean结果true或false,这就是您用来对数组进行排序的结果。该值true大于false,您可以通过执行:println(false&nbsp;<&nbsp;true)这将打印true使用您的代码:array.sortBy&nbsp;{&nbsp;it&nbsp;==&nbsp;null&nbsp;}对于表达式it == null返回的每个项目,false它将被放置在它将返回的任何项目之前true。所以反其道而行之:array.sortBy&nbsp;{&nbsp;it&nbsp;!=&nbsp;null&nbsp;}结果:[null,&nbsp;null,&nbsp;hello]

拉丁的传说

请记住,对每个对象sortBy执行您指定的转换,然后按转换对象的自然顺序排序。您将对象转换为真值(如果对象为空)和假值(如果对象不为空)。这是您转换后的数组列表:true&nbsp;false&nbsp;true这将根据布尔值的自然顺序进行排序,即 false 在前,因此第二个元素将与第一个元素交换,从而产生结果。要达到您想要的结果,请使用{ it != null }.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java