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

时间:2019-06-02 09:03:56

标签: java sorting kotlin

当我表演时:

val array = arrayListOf<String?>(null, "hello", null)
array.sortBy { it == null }
println(array)

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

这是为什么?

2 个答案:

答案 0 :(得分:6)

表达式:

it == null

返回Boolean结果truefalse,这就是用来对数组进行排序的方式。
true大于{{1 }},您可以通过执行以下操作来查看它:

false

将打印

println(false < true)

使用您的代码:

true

对于表达式array.sortBy { it == null } 返回it == null的每个项目,它将放置在它将为其返回false的任何项目之前。
反之亦然:

true

结果:

array.sortBy { it != null }

答案 1 :(得分:3)

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

您已将对象转换为true(如果对象为null)和false(如果对象不为null)。这是转换后的数组列表:

true false true

这将按照布尔值的自然顺序进行排序,首先是false,因此第二个元素将与第一个交换,产生结果。

要获得所需的结果,请使用{ it != null }