82 votes

Comment puis-je filtrer une liste de tableaux dans Kotlin afin que je ne dispose que des éléments correspondant à ma condition?

J'ai un tableau:

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

Je dois filtrer la liste pour ne me laisser que "January" .

124voto

Nithinlal Points 2257

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 a string
var selectedMonth: String = month.filter { s -> s == "January" }.single()


println("the value 555 is $monthList")
println("the value 555 is $selectedMonth")
 

44voto

zsmb13 Points 36441

Il y a un certain nombre de fonctions de filtrage des collections, si vous voulez garder seulement les valeurs de correspondance "January", vous pouvez utiliser une 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 ne contenant qu' "January".

Si vous voulez tous les mois qui ne sont pas d' "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, à l'aide de l' == et != opérateurs Kotlin est en fait la même que l'appel de la equals de la fonction sur les objets. Pour en savoir plus, voir la documentation sur l'égalité.

Pour la liste complète de la collection de fonctions de la bibliothèque standard, voir la référence de l'API.

20voto

Avijit Karmakar Points 3827

Vous souhaitez filtrer cette liste de Chaînes de caractères contenant des mois.

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

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

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

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

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

Après l' filter() si nous utilisons single() méthode, puis elle retourne une valeur unique et de lever une exception si plus d'une valeur est dans la liste.

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

11voto

Mohit Suthar Points 2278

Je viens de dire que si vous avez une liste personnalisée et que vous vérifiez si elle est nulle ou vide, vous pouvez enregistrer Kotlin sur une seule ligne. Faites-le simplement 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 l' étiquette et la valeur sont les variables de la classe de modèle personnalisé .

8voto

Rishabh876 Points 468

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 en cas de filter .

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X