Я думаю, что самый простой способ с оператором in
:
a in listOf(b, c)
Вы можете включить в список столько элементов, сколько захотите.
Вы можете использовать, when
как
when(a){
b,c -> println("match") // match either b or c
else -> println("no match") // in case of no match
}
Кроме того, вы можете использовать с диапазоном, как
when(number){
100,200 -> println(" 100 or 200 ")
in 1..5 -> println("in range") // between 1 - 5
!in 6..10 -> println("not in range") // not between 6 - 10
else -> println("no match")
}
Вы также можете использовать несколько пользовательских значений enum
как
// often used to represent API/process status etc
when(Status.ERROR){
in listOf(Status.ERROR, Status.EXCEPTION) -> println("Something when wrong")
else -> println("Success")
}
enum class Status{
SUCCESS, ERROR, EXCEPTION
}
Вы можете поместить значения в список и использовать any
:
listOf(b, c).any { it == a }
Это особенно удобно, если у вас есть много значений для сравнения.
На всякий случай, если вам это нужно и для:
a == b && a == c
будет переводиться в listOf(b, c).all { it == a }
Другой вариант (который я лично предпочитаю) - создать функцию расширения:
fun Any.equalsAny(vararg values: Any): Boolean {
return this in values
}
Пример использования:
val result1 = 20.equalsAny(10, 20, 30) // Returns true
val result2 = "ABC".equalsAny(10, 20, 30, 99 , 178) // Returns false
val result3 = "ABC".equalsAny("ABC", "XYD", "123") // Returns true
val result4 = "ABC".equalsAny("xxx", "XYD", "123") // Returns false
Вы можете даже смешивать типы, и это прекрасно работает:
val a = 1
val b = "10"
val c = true
val search = 999
val search2 = false
val result5 = search.equalsAny(a, b, c) // Returns false
val result6 = search2.equalsAny(a, b, c, 872, false) // Returns true