我从官方文档中了解到compareBy creates a comparator using the sequence of functions to calculate a result of comparison. The functions are called sequentially, receive the given values a and b and return Comparable objects
。
我知道对于普通属性(如这里的整数值)必须如何执行此操作,但是compareBy如何处理布尔条件呢?
在这个例子中,我打算把所有的4放在列表的顶部,然后按值的升序排序,但是我不确定这个布尔表达式如何帮助我做到这一点!
fun main(args: Array<String>) {
var foo = listOf(2, 3, 4, 1, 1, 5, 23523, 4, 234, 2, 2334, 2)
foo = foo.sortedWith(compareBy({
it != 4
},{
it
}))
print(foo)
}
产出
[4, 4, 1, 1, 2, 2, 2, 3, 5, 234, 2334, 23523]
2条答案
按热度按时间pexxcrt21#
是
所以当你在
compareBy
中返回it != 4
时,你使用的是Boolean
的排序顺序,即false〈true,你的表达式只有在it == 4
时才是false,而且你确实可以看到4是输出中的第一个元素。6ie5vjzr2#
您的代码提供了两个选择器作为
vararg
到compareBy
:深入研究源代码,我们可以得到
Comparator
,它对应于构建的任意两个值a
和b
:Comparator { a, b -> compareValuesByImpl(a, b, selectors) }
最后:
最后一个代码片段演示了如果所有选择器都有相同的
diff
,则a
和b
被认为是相等的,否则diff!= 0的first选择器获胜。布尔值具有可比性。当将4与任何其他值(比如2)进行比较时,您将得到:
因此,对于排序,4“小于”任何非4的值