Given Kotlin's list lookup syntax,

if (x in myList)

as opposed to idiomatic Java,

if (myList.contains(x))

how can one express negation? The compiler doesn't like either of these:

if (x not in mylist)

if !(x in mylist)

除了if !(mylist.contains(x)))之外,还有其他惯用的表达方式吗?我没看到Kotlin Control Flow docs.人中提到过

推荐答案

Use x !in list syntax.

以下代码:

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运算符使用任何名为contains并返回Boolean的可访问方法或扩展方法.对于集合(List,Set.),它使用collection.contains方法.对于数组(包括基元数组),它使用实现为indexOf(element) >= 0的扩展方法Array.contains

Kotlin相关问答推荐

当通过firstOrders访问时,存储在伴随对象中的对象列表具有空值

我可以在kotlin/java.util.scanner中跳过分隔符而不重复吗?

相当于roomdb中的DateTime Bigint列的是什么

在 Kotlin 中将两个字节转换为 UIn16

按钮无法在 Android Studio 上打开新活动

嵌套数组 indexOf()

如何创建 Kotlin DSL - DSL 语法 Kotlin

创建首选项屏幕时找不到androidx.preference.PreferenceScreen

在 Scaffold Jetpack Compose 内的特定屏幕上隐藏顶部和底部导航器

Android Studio 4.0.0 Java 8 库在 D8 和 R8 构建错误中脱糖

如何在 Kotlin 中创建一个打开新活动(Android Studio)的按钮?

Kotlin-通过与属性列表进行比较来筛选对象列表

如何暂停kotlin coroutine直到收到通知

在 gradle android library kotlin 项目中禁用 META-INF/* 生成

Kotlin lambda 语法混淆

如何从协程范围返回值

Kotlin中的属性(properties)和参数(parameters)有什么区别?

使用 kotlin 每 3 位数添加逗号或点

Kotlin - 如果不为空,则使用修改后的 Obj props 覆盖 Obj props

项目不会使用 Kotlin 1.1.3 构建