如何在Kotlin中检查字符串数组是否包含某个值

122
如何在Kotlin中检查字符串数组是否包含某个值?就像Ruby的#include?一样。
我考虑了以下方法:
array.filter { it == "value" }.any()

有其他的方法吗?
7个回答

163

你要查找的相当于是包含运算符。

array.contains("value") 

Kotlin为这个运算符提供了另一种中缀符号表示法的选择。
"value" in array

在幕后调用的是同一个函数,但因为Java中没有找到中缀符号,所以我们可以说in是最惯用的方式。


2
当我在 Kotlin 中尝试这样做时,会出现“类型推断失败。应在输入类型中提到类型参数 T 的值。”的错误提示。私有变量 domainsArray 包含以下元素:"@ebay.com"、"@google.com"、"@gmail.com" 和 "@umd.edu"。通过 Arrays.asList(domainsArray) 方法将 domainsArray 转换为列表,并使用 contains(email) 方法判断 email 是否存在于该列表中。 - AdamHurwitz
只需编写 var domainFound = domainsArray.contains(email) 或更习惯用语的 var domainFound = email in domainsArray。 - Geoffrey Marizy
有没有想法如何比较大小写不敏感的字符串?array.contains("value") 不会检查字符串的大小写。 - Viks
在调用 contains 函数之前,您可以使用 toLowerCase 字符串扩展函数映射数组。 - Geoffrey Marizy

136

您还可以使用any()来检查数组中是否存在具有特定字段与之进行比较的对象。

listOfObjects.any{ object -> object.fieldxyz == value_to_compare_here }

44

以下是一段代码,可用于在包含对象的ArrayList中查找特定字段。Amar Jain的回答对我很有帮助:

listOfObjects.any{ it.field == "value"}

39

使用 in 操作符是一种惯用的方法来做到这一点。

val contains = "a" in arrayOf("a", "b", "c")

24

10

你可以使用它..contains(" ")

 data class Animal (val name:String)


 val animals = listOf(Animal("Lion"), Animal("Elephant"), Animal("Tiger"))

 println(animals.filter { it.name.contains("n") }.toString())

输出将会是

[Animal(name=Lion), Animal(name=Elephant)]

7
你可以使用find方法,返回与给定的[predicate]匹配的第一个元素,如果没有找到这样的元素,则返回null。 尝试使用以下代码在对象array中查找value
 val findedElement = array?.find {
            it.id == value.id
 }
 if (findedElement != null) {
 //your code here           
 } 

你怎么从数组中获取findedElement值的位置? - Aan
@AnzyShQ,你可以使用方法array.indexIf(Object o)来查找元素的位置,它会返回第一个匹配元素的索引;使用array.lastIndexOf(Object o)则会返回最后一个匹配元素的索引。你也可以使用谓词,例如array.indexOfLast { it.name == "test " }或者array.indexOfFirst { it.name == "test "}等。 - L.Petrosyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接