web-dev-qa-db-fra.com

Comment puis-je filtrer une ArrayList dans Kotlin afin que je ne dispose que d'éléments correspondant à ma condition?

J'ai un tableau:

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

Je dois filtrer la liste pour qu'il ne me reste que "January".

43
Nitt

Vous pouvez utiliser ce code pour filtrer January du tableau en utilisant ce code

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

Il existe un certain nombre de fonctions pour filtrer les collections. Si vous souhaitez conserver uniquement les valeurs correspondant à "January", vous pouvez utiliser le simple 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"

Cela vous donnera une liste contenant seulement "January".

Si vous souhaitez que tous les mois ne soient pas "January", vous pouvez inverser la condition à l'aide de != ou utiliser filterNot() :

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

Cela vous donnera une liste contenant "February" et "March".

Notez que contrairement à Java, utiliser les opérateurs == et != dans Kotlin revient en fait à appeler la fonction equals sur les objets. Pour plus d'informations, voir la documentation sur égalité .

Pour obtenir la liste complète des fonctions de collection dans la bibliothèque standard, reportez-vous à la section Référence de l'API .

32
zsmb13

Vous souhaitez filtrer cette liste de chaînes contenant des mois.

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

Vous pouvez utiliser filterNot() méthode de liste. Il retourne une liste contenant tous les éléments sauf le prédicat donné.

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

Vous pouvez utiliser filter() méthode de liste. Il retourne une liste contenant tous les éléments correspondant au prédicat donné.

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

Après filter() si nous utilisons la méthode single() , elle retournera une valeur unique et lèvera une exception si plusieurs valeurs figurent dans la liste.

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

Je partage simplement que si vous avez liste personnalisée et vérifiez si nul ou vierge, vous pouvez enregistrer Kotlin en une seule ligne. Faites-le comme ça

  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
  }

Vous pouvez également vérifier plusieurs conditions

 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
  }

Remarque: Je suppose que étiquette et valeur sont les variables de Custom Classe modèle.

6
Mohit Suthar

Vous pouvez également utiliser find ou findLast. Ceci est spécifiquement conçu pour renvoyer une seule valeur au lieu d'une liste de String renvoyée dans le cas de filter.

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