Raf*_*iva 15 java anonymous-class comparator kotlin
此代码基本上按降序对数组进行排序:
val arrayList = arrayListOf(1, 5, 2)
Collections.sort(arrayList, object : Comparator<Int> {
override fun compare(x : Int, y: Int) = y - x
})
Run Code Online (Sandbox Code Playgroud)
世界上如何将比较方法与y - x作品重叠?科特林怎么知道是什么y - x意思把y之前x如果y < x?
esk*_*ski 20
这实际上与Kotlin无关.它与Java API的Comparator接口有关,也与Collections.sort如何使用它有关.
从文档:
比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.
现在让我们试试你给出的论点:
Collections.sort对y-x的含义一无所知.它只是尊重Comparator接口的定义合同,任何实现者也需要尊重(如果它想要工作).
事实恰恰相反,这y - x是一个尊重合同的实现,因为Math.
由于Comparator是SAM界面,因此您可以使用lambda编写以下代码,以使其更加简洁:
Collections.sort(arrayList, {x : Int, y: Int -> y - x})
Run Code Online (Sandbox Code Playgroud)
甚至
Collections.sort(arrayList) {
x, y -> y - x
}
Run Code Online (Sandbox Code Playgroud)
因为lambda是sort函数的最后一个参数,x并且y可以推断出和的数据类型。
接受两个对象并为其定义一个整数是对排序定义的抽象。基本上,您可以指定如果排序,将按哪些顺序布置这些元素。
为了对整数进行排序,这似乎有些矫kill过正,但是考虑对诸如类实例之类的更复杂的对象进行排序Car。
此类有一个colorCode,您想按此排序:
Collections.sort(cars) {
car1, car2 -> car1.colorCode - car2.colorCode
}
Run Code Online (Sandbox Code Playgroud)
这就是您以抽象方式为这些对象定义顺序的方式。
| 归档时间: |
|
| 查看次数: |
16421 次 |
| 最近记录: |