我有一个数组:
var month: List<String> = arrayListOf("January", "February", "March")
我必须过滤列表,所以我只剩下"January"
。
答案 0 :(得分:52)
您可以使用此代码
来使用此代码从数组中过滤掉Januaryvar month: List<String> = arrayListOf("January", "February", "March")
// to get the result as list
var monthList: List<String> = month.filter { s -> s == "January" }
// to get a a string
var selectedMonth: String = month.filter { s -> s == "January" }.single()
println("the value 555 is $monthList")
println("the value 555 is $selectedMonth")
答案 1 :(得分:29)
有许多用于过滤集合的函数,如果您只想保留与"January"
匹配的值,则可以使用简单的filter()
:
val months = listOf("January", "February", "March")
months.filter { month -> month == "January" } // with explicit parameter name
months.filter { it == "January" } // with implicit parameter name "it"
这些将为您提供仅包含"January"
。
如果您希望所有月份不 "January"
,您可以使用!=
撤消条件,或使用filterNot()
:
months.filter { it != "January" }
months.filterNot { it == "January" }
这些将为您提供包含"February"
和"March"
。
请注意,与Java不同,在Kotlin中使用==
和!=
运算符实际上与在对象上调用equals
函数相同。有关详情,请参阅有关equality的文档。
有关标准库中的集合函数的完整列表,请参阅API reference。
答案 2 :(得分:10)
您想要过滤包含月份的字符串列表。
var month : List<String> = arrayListOf("January", "February", "March")
您可以使用filterNot()
列表方法。它返回一个包含除给定谓词之外的所有元素的列表。
var filteredMonthList : List<String> = month.filterNot { s -> s == "January" }
// results: ["February", "March"]
您可以使用filter()
列表方法。它返回一个列表,其中包含与给定谓词匹配的所有元素。
var filteredMonthList : List<String> = month.filter { s -> s == "January" }
// results: ["January"]
如果我们使用single()
方法,filter()
之后,如果列表中有多个值,它将返回单个值并抛出异常。
var filteredMonth : String = month.filter { s -> s == "January" }.single()
// result: "January"
答案 3 :(得分:6)
我只是分享一下,如果你有自定义列表并检查它是 null还是空白,你可以单行检查Kotlin 就这样做吧
fun filterList(listCutom: List<Custom>?) {
var fiterList = listCutom!!.filter { it.label != "" }
//Here you can get the list which is not having any kind of lable blank
}
您也可以检查多个条件
fun filterList(listCutom: List<Custom>?) {
var fiterList = listCutom!!.filter { it.label != "" && it.value != ""}
//Here you can get the list which is not having any kind of lable or value blank
}
注意:我假设标签&amp;值是自定义模型类的变量。
答案 4 :(得分:2)
您还可以使用find或findLast
。这意味着只返回一个值,而不是String
中返回的filter
列表。
var month = arrayListOf("January", "February", "March")
var result = month.find { s -> s == "January" }
答案 5 :(得分:0)
按谓词过滤
val numbers = listOf("one", "two", "three", "four")
var items: List<String> = numbers.filter { s -> s == "one" }
var item = numbers.singleOrNull { it == "one" }
if (item != null) {
print("FOUND:$item")
} else {
print("Not FOUND!")
}