Kotlin: «если элемент не в списке» правильный синтаксис

Учитывая синтаксис поиска списка Kotlin,

if (x in myList) 

в отличие от идиоматической Java,

 if (myList.contains(x)) 

как можно выразить отрицание? Компилятор не любит ни одно из них:

 if (x not in mylist) if !(x in mylist) 

Есть ли идиоматический способ выразить это, кроме if !(mylist.contains(x))) ? Я не видел, чтобы это упоминалось в документах Kotlin Control Flow.

Используйте синтаксис синтаксиса x !in list .

Следующий код:

 val arr = intArrayOf(1,2,3) if (2 !in arr) println("in list") 

составляется до эквивалента:

 int[] arr = new int[]{1, 2, 3}; // uses xor since JVM treats booleans as int if(ArraysKt.contains(arr, 2) ^ true) { System.out.println("in list"); } 

Операторы in и !in In используют любой доступный метод или метод расширения, который называется contains и возвращает Boolean . Для коллекции (list, set …) используется метод collection.contains . Для массивов (включая примитивные массивы) используется метод расширения Array.contains который реализуется как indexOf(element) >= 0

Оператор для этого в Котлине есть. Таким образом, вы можете сделать

 if (x !in myList) { ... } 

Вы можете найти это в официальных документах о перегрузке оператора .