ChatGPT解决这个技术问题 Extra ChatGPT

Kotlin - 检查数组是否包含值的惯用方法

检查字符串数组是否包含 Kotlin 中的值的惯用方法是什么?就像 ruby 的 #include? 一样。

我想过:

array.filter { it == "value" }.any()

有没有更好的办法?


G
Geoffrey Marizy

您正在寻找的等价物是 contains 运算符。

array.contains("value") 

Kotlin 为该运算符提供了一个替代 infix notation

"value" in array

这与在后台调用的函数相同,但由于在 Java 中找不到 infix notation,我们可以说 in 是最惯用的方式。


当我在 Kotlin 中尝试此操作时,我得到“类型推断失败。类型参数 T 的值应在输入类型中提及。” private var domainArray = arrayOf("@ebay.com", "@google.com", "@gmail.com", "@umd.edu") var domainFound = Arrays.asList(domainsArray).contains(email)
只需写 var domainFound = domainArray.contains(email) 或更多惯用的 var domainFound = email in domainArray
知道如何与忽略大小写字符串进行比较吗? array.contains("value") 不检查字符串的忽略大小写。
您可以在调用 contains 之前使用 toLowerCase 字符串扩展函数映射数组。
A
Amar Jain

您还可以使用 any() 检查数组是否包含具有某些特定字段的对象以进行比较

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

D
Dimitar

这是代码,您可以在其中找到带有对象的 ArrayList 中的特定字段。 Amar Jain 的回答帮助了我:

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

G
Gerson

使用 in 运算符是一种惯用的方法。

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

m
mfulton26

您可以使用 in operator,在这种情况下,它调用 contains

"value" in array


J
Jack

你可以使用它..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)]

L
L.Petrosyan

您可以使用 find 方法,它返回匹配给定 [predicate] 的第一个元素,如果没有找到这样的元素,则返回 null。尝试使用此代码在 array 个对象中查找 value

 val findedElement = array?.find {
            it.id == value.id
 }
 if (findedElement != null) {
 //your code here           
 } 

如何从数组中获取 foundElement 值的位置?
谢谢它对我有用
@AnzyShQ 您可以使用方法 array.indexIf(Object o) -> 找到一个位置将返回第一个元素的索引,array.lastIndexOf(Object o) ->将返回您最后建立的元素的索引。您也可以使用谓词等 array.indexOfLast { it.name == "test " }array.indexOfFirst { it.name == "test "}