Java 为什么Kotlin sortBy()的操作顺序似乎相反?
当我表演时:Java 为什么Kotlin sortBy()的操作顺序似乎相反?,java,sorting,kotlin,Java,Sorting,Kotlin,当我表演时: val array = arrayListOf<String?>(null, "hello", null) array.sortBy { it == null } println(array) val array=arrayListOf(null,“hello”,null) array.sortBy{it==null} println(数组) 我希望它首先打印null值,因为这是我指定的选择器。但是,println(数组)返回[hello,null,null] 这是
val array = arrayListOf<String?>(null, "hello", null)
array.sortBy { it == null }
println(array)
val array=arrayListOf(null,“hello”,null)
array.sortBy{it==null}
println(数组)
我希望它首先打印null
值,因为这是我指定的选择器。但是,println(数组)
返回[hello,null,null]
这是为什么?表达式:
it == null
返回一个Boolean
结果true
或false
,这是用于对数组进行排序的值。值
true
大于false
,可以通过执行以下命令来查看:
println(false < true)
使用您的代码:
array.sortBy { it == null }
对于表达式it==null
返回false
的每个项目,它将被放置在它将返回true
的任何项目之前反之亦然:
array.sortBy { it != null }
结果:
[null, null, hello]
请记住,
sortBy
对每个对象执行指定的变换,然后按照变换对象的自然顺序进行排序
您将对象转换为true(如果对象为null)和false(如果对象不为null)。以下是转换后的数组列表:
true false true
这将根据布尔函数的自然顺序进行排序,也就是FALSE优先,所以第二个元素将与第一个元素交换,产生结果
要获得所需的结果,请使用
{it!=null}
即使{it!=null}
也会将非null值保留在一起,但顺序未指定。(在本例中只有一个,这就是为什么它不明显的原因。)我建议改为{it?:“”
,它将对每个项目进行排序,首先放置空值(和任何空字符串)。@gidds从我做的每个测试中,非空值的顺序与预排序列表中的顺序相同。
true false true