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

Nit*_*itt 48 filtering list kotlin

我有一个数组:

var month: List<String> = arrayListOf("January", "February", "March")
Run Code Online (Sandbox Code Playgroud)

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

Nit*_*lal 73

您可以使用此代码从数组中过滤掉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 string
var selectedMonth: String = month.filter { s -> s == "January" }.single()
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在Kotlin中,您不必明确使用`.equals`.使用`=='来做正确的事情会更加惯用. (5认同)
  • 这与请求相反,他们想要从列表中删除"1月"而不是仅保留1月,请更新答案是正确的,否则接受的答案应该从zsmb13回答,这涵盖了两种情况. (3认同)
  • Kotlin很性感! (2认同)
  • 您可以进一步简化它:`month.single { s -&gt; s == "January" }` (2认同)
  • 甚至更短的 `month.single { it == "January" }` (2认同)

zsm*_*b13 33

有许多用于过滤集合的函数,如果只想保持值匹配"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"
Run Code Online (Sandbox Code Playgroud)

这些将为您提供仅包含的列表"January".

如果您希望所有月份都没有 "January",您可以使用反转条件!=,或使用filterNot():

months.filter { it != "January" }
months.filterNot { it == "January" } 
Run Code Online (Sandbox Code Playgroud)

这些将为您提供包含"February"和的列表"March".

请注意,与Java不同,在Kotlin中使用==!=运算符实际上与equals在对象上调用函数相同.有关更多信息,请参阅有关相等性的文档.

有关标准库中的集合函数的完整列表,请参阅API参考.

  • 您可以执行类似`months.filter {it!in listOf("January","March"}`的操作. (4认同)

Avi*_*kar 12

您想要过滤包含月份的字符串列表.

var month : List<String> = arrayListOf("January", "February", "March")
Run Code Online (Sandbox Code Playgroud)

您可以使用filterNot()列表的方法.它返回一个包含除给定谓词之外的所有元素的列表.

var filteredMonthList : List<String> = month.filterNot { s -> s == "January" }
// results:  ["February", "March"]
Run Code Online (Sandbox Code Playgroud)

您可以使用filter()列表的方法.它返回一个列表,其中包含与给定谓词匹配的所有元素.

var filteredMonthList : List<String> = month.filter { s -> s == "January" }
// results:  ["January"]
Run Code Online (Sandbox Code Playgroud)

filter()如果我们使用single()方法,那么它会返回一个值,如果超过一个值列表抛出异常.

var filteredMonth : String = month.filter { s -> s == "January" }.single()
// result:  "January"
Run Code Online (Sandbox Code Playgroud)


Ris*_*876 8

您也可以使用findfindLast。这特别意味着仅返回一个值,而不是Stringfilter.

var month = arrayListOf("January", "February", "March")
var result = month.find { s -> s == "January" }
Run Code Online (Sandbox Code Playgroud)


Moh*_*har 7

我只是分享,如果你有自定义列表并检查它是否为空或空白你可以在单行检查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
  }
Run Code Online (Sandbox Code Playgroud)

您也可以检查多个条件

 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
  }
Run Code Online (Sandbox Code Playgroud)

注意:我假设label和valueCustom Model类的变量.


Sho*_*omu 5

按谓词过滤

    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!")
    }
Run Code Online (Sandbox Code Playgroud)