Bitte klären Sie die Frage, dass "Januar" aus der Liste herausgefiltert (entfernt) werden soll, oder filtern Sie die Liste so, dass NUR "Januar" angezeigt wird ... Die Frage wird in den Antworten auf eine Weise interpretiert, die dem Sinn entgegengesetzt erscheint.
Ich musste den Monat Januar herausfiltern. Ich habe die Frage bearbeitet
Nitt
filtern oder filtern?
Strg-Alt-Delor
Antworten:
114
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 listvar monthList: List<String> = month.filter { s -> s == "January" }
// to get a stringvar selectedMonth: String = month.filter { s -> s == "January" }.single()
Beachten Sie, dass Sie in Kotlin nicht .equalsexplizit verwenden müssen. Es wäre idiomatischer, nur das zu verwenden, ==was das Richtige tut.
Zienkikk
3
Dies ist das Gegenteil der Anfrage. Sie möchten "Januar" aus der Liste entfernen und nicht nur den Januar behalten. Bitte aktualisieren Sie die Antwort, um korrekt zu sein. Andernfalls sollte die akzeptierte Antwort in die Antwort von zsmb13 verschoben werden, die beide Fälle abdeckt.
Jayson Minard
2
Sie können es noch weiter vereinfachen mit:month.single { s -> s == "January" }
Matthew Patience
Wie würde sich dies ändern, wenn Sie eine Liste mit benutzerdefinierten Objekten hätten und nicht nur einen integrierten Typ wie Int oder String?
Zonker.in.Geneva
37
Es gibt eine Reihe von Funktionen zum Filtern von Sammlungen. Wenn Sie nur übereinstimmende Werte beibehalten möchten "January", können Sie Folgendes verwenden 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"
Diese geben Ihnen eine Liste, die nur enthält "January".
Wenn Sie alle Monate möchten, die nicht sind"January" , können Sie den Zustand entweder umkehren !=oder verwenden 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 tatsächlich dem Aufruf der equalsFunktion für die Objekte entspricht. Weitere Informationen finden Sie in den Dokumenten zur Gleichstellung .
Die vollständige Liste der Erfassungsfunktionen in der Standardbibliothek finden Sie in der API-Referenz .
Wie würde ich mehrere Werte herausfiltern? Angenommen, ich möchte, dass sowohl "Januar" als auch "März" aus der Liste herausgefiltert werden.
Lidia Hocke
5
Sie könnten so etwas tun months.filter { it !in listOf("January", "March" }.
zsmb13
17
Sie möchten diese Liste von Zeichenfolgen filtern, die Monate enthalten.
var month : List<String> = arrayListOf("January", "February", "March")
Sie können die filterNot()Methode der Liste verwenden. Es wird eine Liste zurückgegeben, die alle Elemente außer dem angegebenen Prädikat enthält.
var filteredMonthList : List<String> = month.filterNot { s -> s == "January" }
// results: ["February", "March"]
Sie können die filter()Methode der Liste verwenden. Es wird eine Liste zurückgegeben, die alle Elemente enthält, die dem angegebenen Prädikat entsprechen.
var filteredMonthList : List<String> = month.filter { s -> s == "January" }
// results: ["January"]
Nach dem, filter()wenn wir verwenden single()Methode , dann wird es einen einzelnen Wert zurückgeben und eine Ausnahme auslösen , wenn mehr als ein Wert in der Liste ist.
var filteredMonth : String = month.filter { s -> s == "January" }.single()
// result: "January"
Dies ist das Gegenteil von dem, was gefragt wurde.
Jayson Minard
Die Frage fragt nach dem Monat, was bedeutet, ihn zu entfernen. Sie tun das Gegenteil und filtern alles, ABER den Monat. Die Frage sollte etwas klarer formuliert werden als "Filter out the month"
Jayson Minard
@JaysonMinard Bitte überprüfen Sie die Antwort jetzt.
Avijit Karmakar
@ JaysonMinard Danke. Die Antwort sieht fantastisch aus.
Avijit Karmakar
9
Ich teile nur, dass Sie, wenn Sie eine benutzerdefinierte Liste haben und prüfen, ob diese null oder leer ist, Kotlin in einer einzigen Zeile einchecken können. Tun Sie es einfach so
funfilterList(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
funfilterList(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 der benutzerdefinierten Modellklasse sind.
Sie können auch find oder verwenden findLast. Dies ist speziell dazu gedacht, nur einen Wert anstelle einer Liste von Stringzurückgegebenen im Fall von zurückzugeben filter.
var month = arrayListOf("January", "February", "March")
var result = month.find { s -> s == "January" }
Antworten:
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()
quelle
.equals
explizit verwenden müssen. Es wäre idiomatischer, nur das zu verwenden,==
was das Richtige tut.month.single { s -> s == "January" }
Es gibt eine Reihe von Funktionen zum Filtern von Sammlungen. Wenn Sie nur übereinstimmende Werte beibehalten möchten
"January"
, können Sie Folgendes verwendenfilter()
: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, die nur enthält
"January"
.Wenn Sie alle Monate möchten, die nicht sind
"January"
, können Sie den Zustand entweder umkehren!=
oder verwendenfilterNot()
: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 tatsächlich dem Aufruf derequals
Funktion für die Objekte entspricht. Weitere Informationen finden Sie in den Dokumenten zur Gleichstellung .Die vollständige Liste der Erfassungsfunktionen in der Standardbibliothek finden Sie in der API-Referenz .
quelle
months.filter { it !in listOf("January", "March" }
.Sie möchten diese Liste von Zeichenfolgen filtern, die Monate enthalten.
var month : List<String> = arrayListOf("January", "February", "March")
Sie können die
filterNot()
Methode der Liste verwenden. Es wird eine Liste zurückgegeben, die alle Elemente außer dem angegebenen Prädikat enthält.var filteredMonthList : List<String> = month.filterNot { s -> s == "January" } // results: ["February", "March"]
Sie können die
filter()
Methode der Liste verwenden. Es wird eine Liste zurückgegeben, die alle Elemente enthält, die dem angegebenen Prädikat entsprechen.var filteredMonthList : List<String> = month.filter { s -> s == "January" } // results: ["January"]
Nach dem,
filter()
wenn wir verwendensingle()
Methode , dann wird es einen einzelnen Wert zurückgeben und eine Ausnahme auslösen , wenn mehr als ein Wert in der Liste ist.var filteredMonth : String = month.filter { s -> s == "January" }.single() // result: "January"
quelle
Ich teile nur, dass Sie, wenn Sie eine benutzerdefinierte Liste haben und prüfen, ob diese null oder leer ist, 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 der benutzerdefinierten Modellklasse sind.
quelle
Sie können auch find oder verwenden
findLast
. Dies ist speziell dazu gedacht, nur einen Wert anstelle einer Liste vonString
zurückgegebenen im Fall von zurückzugebenfilter
.var month = arrayListOf("January", "February", "March") var result = month.find { s -> s == "January" }
quelle
Filtern nach Prädikat
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!") }
quelle