Kotlin中的可比阵列

时间:2018-07-01 16:53:54

标签: arrays kotlin

来自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")
    }

}

1 个答案:

答案 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)]