来自Swift世界,我试图弄清楚如何在对象数组上使用类似的功能,例如min()
或max()
。在Swift中,我将使用类似的协议-
class Car: Comparable {
let year: Int
static func < (lhs: Car, rhs: Car) -> Bool {
return lhs.year < rhs.year
}
static func == (lhs: Car, rhs: Car) -> Bool {
return lhs.year == rhs.year
}
}
但是您将如何在Kotlin中做同样的事情?我已经尝试过了,但是我不确定这是正确的方法,还是不确定如何实现可迭代函数-
data class Car(val year: Int): Comparable<Car>, Iterable<Car> {
override fun compareTo(other: Car) = when {
this.year < other.year -> -1
this.year > other.year -> 1
else -> 0
}
override fun iterator(): Iterator<Car> {
TODO("not implemented")
}
}
答案 0 :(得分:1)
关于您的实现没有问题,但是您可以使其更简单:
data class Car(val year: Int): Comparable<Car> {
override fun compareTo(other: Car) = year - other.year
}
您不应该实现Iterable
接口,因为这会使Car
成为一种集合。
在给定的Car
实现下运行以下示例
listOf(Car(2004), Car(2007), Car(2001)).run {
println(this)
println(min())
println(max())
println(sorted())
}
产生
的输出[Car(year=2004), Car(year=2007), Car(year=2001)]
Car(year=2001)
Car(year=2007)
[Car(year=2001), Car(year=2004), Car(year=2007)]