當我執行: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
結果true
或false
,這就是您用來對數組進行排序的結果。
該值true
大于false
,您可以通過執行:
println(false < true)
這將打印
true
使用您的代碼:
array.sortBy { it == null }
對于表達式it == null
返回的每個項目,false
它將被放置在它將返回的任何項目之前true
。
所以反其道而行之:
array.sortBy { it != null }
結果:
[null, null, hello]

拉丁的傳說
TA貢獻1789條經驗 獲得超8個贊
請記住,對每個對象sortBy
執行您指定的轉換,然后按轉換對象的自然順序排序。
您將對象轉換為真值(如果對象為空)和假值(如果對象不為空)。這是您轉換后的數組列表:
true false true
這將根據布爾值的自然順序進行排序,即 false 在前,因此第二個元素將與第一個元素交換,從而產生結果。
要達到您想要的結果,請使用{ it != null }
.
添加回答
舉報
0/150
提交
取消