Я согласен с Луи, что setA.any { it in setB }
кажется довольно читабельным и опирается исключительно на стандартные библиотечные функции.В качестве альтернативы вы можете использовать ссылку на метод, чтобы сделать ее немного более явной:
setA.any(setB::contains)
Повторив немного дальше, вы можете просто определить свою собственную функцию расширения:
infix fun <T: Any> Set<T>.intersects(other: Set<T>) = any(other::contains)
Тогда выможно просто написать:
if (setA intersects setB)
РЕДАКТИРОВАТЬ: Учитывая ваш обновленный вопрос, я бы отметил, что эта функция расширения может масштабироваться до любого типа коллекции, или с вашим подходом varargs:
infix fun <T: Any> Collection<T>.intersects(other: Collection<T>) = any(other::contains)
fun <T: Any> Collection<T>.intersects(vararg others: T) = any(other::contains)
Таким образом, вы все еще можете сделать что-то вроде:
if (myList intersects setOf("1", "2", "3"))
или
if (myList.intersects("1", "2", "3"))