Hacer una breve statement if

En mi código tengo esta statement if:

if (categoryName == "SomeName1" || categoryName == "SomeName2" || categoryName == "SomeName3" || categoryName == "SomeName4" || categoryName == "SomeName5" || categoryName == "SomeName6") { // Do something } 

Me preguntaba si podría acortar esto si. Algo como:

 if (categoryName == "SomeName1" and "SomeName2" and "SomeName3" ...) { // Do something } 

¿Hay algún enfoque para hacer algo como esto en Kotlin?

Rápido y sucio

 if (Arrays.asList("SomeName1", "SomeName2", "SomeName3", "SomeName4", "SomeName5", "SomeName6").contains(categoryName)) { // Do something } 

Mejor

 val myList = Arrays.asList("SomeName1", "SomeName2", "SomeName3", "SomeName4", "SomeName5", "SomeName6"); if (myList.contains(categoryName)) { // Do something } 

EDITAR La respuesta de Voddan usando setOf es mejor.

Puede usar una instrucción when . La syntax se parece a lo que estabas pidiendo:

 when (categoryName) { "SomeName1", "SomeName2", "SomeName3", "SomeName4", "SomeName5", "SomeName6" -> // Do something } 

¿Qué tal una statement de cambio?

 switch(categoryName) { case "SomeName1": case "SomeName2": case "SomeName3": case "SomeName4": case "SomeName5": case "SomeName6": // Do something break; default: // Do something else break; } 

Puede considerar usar una expresión regular:

 if (categoryName.matches(Regex("SomeName[1-6]"))) { // Do something } 

La solución de Kotlin-ish más IMO:

 val names = setOf("SomeName1", "SomeName2", "SomeName3", "SomeName4", "SomeName5", "SomeName6") if (categoryName in names) { // Do something } 

Utiliza la búsqueda en un set de hash, por lo que también puede ser la solución más rápida bajo ciertas condiciones.

  • Mocking methods de Kotlin con Java + Mockito
  • Convierta la function de Scala a la function de Kotlin
  • Clase abstracta Kotlin java IllegalAccessError
  • Obtiene N últimos objects emitidos por observables en RxJava2
  • ¿Puedo get una KFunction de una variable del tipo de function en Kotlin?
  • @XmlElement no funciona cuando se usa en kotlin
  • Escribir una interfaz Copyable más elegante que en Java
  • por qué las asignaciones no son declaraciones
  • Contrato de testing DSL comportamiento incorrecto / error
  • ¿Es un val de instancia más costoso que el object compañero val?
  • Disparador usando Teamcity Kotlin DSL