为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2022-12-28 16:07:32
当我执行: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结果truefalse,这就是您用来对数组进行排序的结果。
该值true大于false,您可以通过执行:

println(false < true)

这将打印

true

使用您的代码:

array.sortBy { it == null }

对于表达式it == null返回的每个项目,false它将被放置在它将返回的任何项目之前true
所以反其道而行之:

array.sortBy { it != null }

结果:

[null, null, hello]


查看完整回答
反对 回复 2022-12-28
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

请记住,对每个对象sortBy执行您指定的转换,然后按转换对象的自然顺序排序。

您将对象转换为真值(如果对象为空)和假值(如果对象不为空)。这是您转换后的数组列表:

true false true

这将根据布尔值的自然顺序进行排序,即 false 在前,因此第二个元素将与第一个元素交换,从而产生结果。

要达到您想要的结果,请使用{ it != null }.



查看完整回答
反对 回复 2022-12-28
  • 2 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信