Есть ли более элегантный способ написать этот геттер на Kotlin? - PullRequest
0 голосов
/ 30 марта 2019

Новичок в Kotlin - любопытно, есть ли более элегантный способ написать duration метод получения для следующего класса (или любые другие советы по стилю или ошибки):

open class Timeline(
    open var props: MutableList<Prop> = mutableListOf()) {

    val duration: Long
        get() {
            var best: Prop? = null
            props.forEach {
                if (best == null || it.interval.end > best?.interval!!.end) {
                    best = it
                }
            }
            return best?.interval?.end ?: 0L
        }
}

По сути, это просто поископора с наибольшим интервалом.Я знаю, что могу просто убедиться, что props List сортируется при добавлении к нему элементов, и просто захватить элемент в конце списка, но это не вопрос.

1 Ответ

3 голосов
/ 30 марта 2019

Если вы пытаетесь найти наибольшее значение end, вы можете сделать это в одной строке:

val duration: Long = 
    props.map { it.interval.end }.max() ?: 0L

По сути, это говорит: «Преобразуйте каждый Prop в его interval.end значение и примите максимальное значение. Если нет максимального значения, верните 0».

Чтобы расширить это, если бы вы хотели Prop с самым высоким interval.end, вы бы написали это так:

val bestProp: Prop? = 
    props.maxBy { it.interval.end }

Что означает: «Найти Prop с максимальным значением interval.end или ноль, если ничего не найдено».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...