Сделать короткое заявление if

В моем коде есть инструкция if if:

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

Мне было интересно, могу ли я сократить это, если. Что-то вроде:

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

Есть ли какой-нибудь подход, чтобы сделать что-то подобное в Котлине?

    Быстро и грязно

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

    Лучше

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

    EDIT Ответ Воддана с использованием setOf лучше.

    Вы можете использовать оператор when . Тип синтаксиса выглядит так, как вы просите:

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

    Как насчет оператора switch?

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

    Вы можете использовать регулярное выражение:

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

    Самое решение Котлин-Иш ИМО:

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

    Он использует поиск в хэш-наборе, поэтому он может также быть самым быстрым решением при определенных условиях.