it-swarm.com.de

Wie kann ich eine ArrayList in Kotlin filtern, damit ich nur Elemente habe, die meiner Bedingung entsprechen?

Ich habe ein Array:

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

Ich muss die Liste filtern, damit ich nur noch "January".

43
Nitt

Mit diesem Code können Sie den Januar mithilfe dieses Codes aus dem Array herausfiltern

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()
63
Nithinlal

Es gibt eine Reihe von Funktionen zum Filtern von Sammlungen. Wenn Sie nur Werte beibehalten möchten, die mit "January" Übereinstimmen, können Sie das einfache filter() verwenden:

val months = listOf("January", "February", "March")

months.filter { month -> month == "January" } // with explicit parameter name
months.filter { it == "January" }             // with implicit parameter name "it"

Diese geben Ihnen eine Liste mit nur "January".

Wenn Sie möchten, dass alle Monate nicht "January" Sind, können Sie die Bedingung entweder mit != Umkehren oder - filterNot() :

months.filter { it != "January" }
months.filterNot { it == "January" } 

Diese geben Ihnen eine Liste mit "February" Und "March".

Beachten Sie, dass im Gegensatz zu Java die Verwendung der Operatoren == Und != In Kotlin der Aufruf der Funktion equals für die Objekte entspricht. Weitere Informationen finden Sie in den Dokumenten zu Gleichheit .

Eine vollständige Liste der Erfassungsfunktionen in der Standardbibliothek finden Sie in der API-Referenz .

32
zsmb13

Sie möchten diese Liste von Zeichenfolgen filtern, die Monate enthalten.

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

Sie können die Methode filterNot() der Liste verwenden. Es wird eine Liste mit allen Elementen außer dem angegebenen Prädikat zurückgegeben.

var filteredMonthList : List<String> = month.filterNot { s -> s == "January" }
// results:  ["February", "March"]

Sie können die Methode filter() der Liste verwenden. Es wird eine Liste mit allen Elementen zurückgegeben, die mit dem angegebenen Prädikat übereinstimmen.

var filteredMonthList : List<String> = month.filter { s -> s == "January" }
// results:  ["January"]

Wenn wir nach filter() die Methode single() verwenden, wird ein einzelner Wert zurückgegeben und eine Ausnahme ausgelöst, wenn mehr als ein Wert in der Liste enthalten ist.

var filteredMonth : String = month.filter { s -> s == "January" }.single()
// result:  "January"
11
Avijit Karmakar

Ich teile nur, dass, wenn Sie benutzerdefinierte Liste haben und prüfen, ob es null oder leer ist, Sie Kotlin in einer einzigen Zeile einchecken können. Tun Sie es einfach so

  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
  }

Sie können auch mehrere Bedingungen überprüfen

 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
  }

Hinweis: Ich gehe davon aus, dass label & value die Variablen von Custom Model class sind.

6
Mohit Suthar

Sie können auch find oder findLast verwenden. Dies ist speziell dazu gedacht, nur einen Wert anstelle einer Liste von String zurückzugeben, die im Fall von filter zurückgegeben wird.

var month = arrayListOf("January", "February", "March")
var result = month.find { s -> s == "January" }
3
Rishabh876