当我表演时:
val array = arrayListOf<String?>(null, "hello", null)
array.sortBy { it == null }
println(array)
我希望它会首先打印null
值,因为这是我指定的选择器。但是,println(array)
返回[hello, null, null]
。
这是为什么?
答案 0 :(得分:6)
表达式:
it == null
返回Boolean
结果true
或false
,这就是用来对数组进行排序的方式。
值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 }
。