如何在Kotlin中过滤ArrayList,以便我只有符合条件的元素?

时间:2017-05-21 15:40:59

标签: list kotlin filtering

我有一个数组:

var month: List<String> = arrayListOf("January", "February", "March")

我必须过滤列表,所以我只剩下"January"

6 个答案:

答案 0 :(得分:52)

您可以使用此代码

来使用此代码从数组中过滤掉January
var 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)

您还可以使用findfindLast。这意味着只返回一个值,而不是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!")
    }