Kotlin:"if item not in list"正确的语法



给定Kotlin的列表查找语法,

if (x in myList)

而不是惯用的java,

if (myList.contains(x))

一个人如何表达否定?编译器不喜欢其中任何一个:

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

除了if !(mylist.contains(x)))以外,是否有一种惯用方法来表达这种情况?我在Kotlin控制流文档中没有看到它。

使用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操作员使用名为contains并返回Boolean的任何可访问方法或扩展方法。对于集合(列表,设置...(,它使用collection.contains方法。对于数组(包括原始数组(,它使用扩展方法Array.contains,该方法用于indexOf(element) >= 0

Kotlin中的操作员是!in。所以你可以做

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

您可以在有关操作员过载的官方文档中找到这一点。

尽管==将以相等的比较将重复的数据类比较,但!in不认为重复副本是相同的。

这是我的解决方案:

// Create a set of hashcodes
val itemHashes = myCollection.map { it.hashCode() }.toSet()
// Use !in with the set
item.hashCode() !in itemHashes
// For comparing a whole collection
myCollection.filter { it.hashCode() !in itemHashes }

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

最新更新