当我执行:val array = arrayListOf<String?>(null, "hello", null)array.sortBy { it == null }println(array)我希望它会null首先打印值,因为这是我指定的选择器。但是,println(array)返回[hello, null, null].为什么是这样?
2 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
表达方式:
it == null
返回Boolean
结果true
或false
,这就是您用来对数组进行排序的结果。
该值true
大于false
,您可以通过执行:
println(false < true)
这将打印
true
使用您的代码:
array.sortBy { it == null }
对于表达式it == null
返回的每个项目,false
它将被放置在它将返回的任何项目之前true
。
所以反其道而行之:
array.sortBy { it != null }
结果:
[null, null, hello]
拉丁的传说
TA贡献1789条经验 获得超8个赞
请记住,对每个对象sortBy
执行您指定的转换,然后按转换对象的自然顺序排序。
您将对象转换为真值(如果对象为空)和假值(如果对象不为空)。这是您转换后的数组列表:
true false true
这将根据布尔值的自然顺序进行排序,即 false 在前,因此第二个元素将与第一个元素交换,从而产生结果。
要达到您想要的结果,请使用{ it != null }
.
添加回答
举报
0/150
提交
取消