Минимум 2 обнуляемых числа - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть следующий код:

val num1: Int? = someObject.number
val num2: Int? = anotherObject?.anotherNumber
val numToFallBack = 2

val result: Int
if(number1 != null && number2 != null) {
   result = minOf(number1, number2)
}
else {
   result = number1?:number2?:numToFallBack
}

По сути, я хотел бы в конечном итоге получить число, которое либо меньше, чем num1 и num2, принимая во внимание, что один или оба могут быть null. В случае, если оба значения null используют значение по умолчанию.
Этот фрагмент кода выше, я думаю, слишком java подробный. Как я могу кодировать это более Kotlin способом?

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете использовать оператор when,

val result = when {
    number1 != null && number2 != null -> min(number1, number2)
    number1 != null -> number1
    number2 != null -> number2
    else -> numToFallBack
}

Редактировать: если мы хотим выбрать ненулевое число, мы можем сделать это

val result = when {
    number1 != null && number2 != null -> when {
        number1 == 0 -> number2
        number2 == 0 -> number1
        else -> min(number1, number2)
    }
    number1 != null -> number1
    number2 != null -> number2
    else -> numToFallBack
}

Редактировать 2: если мы вообще не хотим ноль

Вариант 1

number1 = if (number1 == 0) null else number1
number2 = if (number2 == 0) null else number2

val result = when {
    number1 != null && number2 != null -> min(number1, number2)
    number1 != null -> number1
    number2 != null -> number2
    else -> numToFallBack
}

Вариант 2:

val result = when {
    number1 != null && number2 != null -> when {
        number1 == 0 && number2 != 0 -> number2
        number2 == 0 && number1 != 0 -> number1
        number1 == 0 && number2 == 0 -> numToFallBAck
        else -> min(number1, number2)
    }
    number1 != null && number1 != 0 -> number1
    number2 != null && number2 != 0 -> number2
    else -> numToFallBack
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...