Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Kotlin sortBy()的操作顺序似乎相反?_Java_Sorting_Kotlin - Fatal编程技术网

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