给定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)){
}