Koleksioni është diçka që përdoret pothuajse nga të gjithë. Na e bën jetën të lehtë. Lista, Set dhe Harta janë shembujt më të mirë të tyre.

Për të përsëritur, filtruar ose modifikuar objektin ekzistues të koleksionit, Kotlin na ofron disa operatorë të transformimit në ndërtim. Operatori i filtrit është një prej tyre.
Le të përpiqemi të kuptojmë operatorin e filtrit në detaje.

Ky postim fillimisht u postua nëhttps://agrawalsuneet.github.io/blogs/filter-operator-kotlin/ dhe më vonë u ripostua në Medium.

Çfarë është operatori i filtrit?

Operatori i filtrit përdoret për të krijuar një objekt të ri koleksioni duke përsëritur mbi objektin ekzistues të koleksionit dhe duke filtruar elementet bazuar në kallëzuesit e tij. Kallëzuesi që duhet të kontrollohet, kalohet si lambda në funksion.

Meqenëse operatori i filtrit është një zgjatim i Ndërfaqes Iterable, ai mund të përdoret me të tre koleksionet, p.sh. List, Set dhe Map.

/**
 * Returns a list containing only elements matching the given [predicate].
 * 
 * @sample samples.collections.Collections.Filtering.filter
 */
public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {
    return filterTo(ArrayList<T>(), predicate)
}

Filtri gjithashtu ka disa funksione të tjera si më poshtë,

  • filterIndexed
    përdoret për përsëritjen e indeksuar dhe filtroni elementet bazuar në kallëzuesin e dhënë.
  • filterNot
    përdoret për të filtruar elementet që nuk përputheshin me kallëzuesin e dhënë.
  • filterNotNull
    përdoret për filtrimin e elementeve jo-null. Kjo nuk merr asnjë kallëzues.
  • filterIsInstance
    përdoret për të filtruar të gjithë elementët që janë shembull i një lloji të caktuar. Kjo gjithashtu nuk merr ndonjë kallëzues.
/**
 * Returns a list containing only elements matching the given [predicate].
 * @param [predicate] function that takes the index of an element and the element itself
 * and returns the result of predicate evaluation on the element.
 * 
 * @sample samples.collections.Collections.Filtering.filterIndexed
 */
public inline fun <T> Iterable<T>.filterIndexed(predicate: (index: Int, T) -> Boolean): List<T> {
    return filterIndexedTo(ArrayList<T>(), predicate)
}
/**
 * Returns a list containing all elements not matching the given [predicate].
 * 
 * @sample samples.collections.Collections.Filtering.filter
 */
public inline fun <T> Iterable<T>.filterNot(predicate: (T) -> Boolean): List<T>>{
    return filterNotTo(ArrayList<T>(), predicate)
}
/**
 * Returns a list containing all elements that are not `null`.
 * 
 * @sample samples.collections.Collections.Filtering.filterNotNull
 */
public fun <T : Any> Iterable<T?>.filterNotNull(): List<T> {
    return filterNotNullTo(ArrayList<T>())
}
/**
 * Returns a list containing all elements that are instances of specified type parameter R.
 * 
 * @sample samples.collections.Collections.Filtering.filterIsInstance
 */
public inline fun <reified R> Iterable<*>.filterIsInstance(): List<@kotlin.internal.NoInfer R> {
    return filterIsInstanceTo(ArrayList<R>())
}

Filtro me listë

Operatori i filtrit mund të përdoret mbi një listë për të kontrolluar kallëzuesin në elementet e tij dhe për të kthyer listën e filtruar. Mund të përdoret me një parametër të emërtuar ose duke e përdorur atë.

val list = listOf(1, 2, 3, 4, 5)
        
val filteredList = list.filter { it % 2 == 0 }
println(filteredList)

val filteredList2 = list.filter { item -> item % 2 == 0 }
println(filteredList2)

val filteredNotList = list.filterNot { item -> item % 2 == 0 }
println(filteredNotList)

Në rastin e filterIndexed, meqenëse kemi dy variabla të kaluar në funksionin lambda, nuk mund të anashkalojmë parametrat e emërtuar.

val list = listOf(1, 2, 3, 4, 5)
    
val filteredIndexList = list.filterIndexed {index, item -> (index != 0) && (item % 2 == 0) }
println(filteredIndexList)

Në rastin e filterNotNull, ai filtron vlerat null dhe kthen listën vetëm me vlerat jo-null.

val list = listOf(1, null, 3, 4, 5, null)

val filteredNotNullList = list.filterNotNull()
println(filteredNotNullList)

Në rastin e filterIsInstance, ai filtron daljet dhe kthen listën e elementeve të llojit të caktuar të të dhënave të specifikuar.

val list = listOf(1, "", true, 4, 0.0, 0.0f)
val filteredIsInstanceList = list.filterIsInstance<Int>()
println(filteredIsInstanceList)

Filtro me Set

Ngjashëm me Listën, operatori i filtrit mund të përdoret mbi një grup për të kontrolluar kallëzuesin në elementët e tij për të kthyer grupin e filtruar. Mund të përdoret me një parametër të emërtuar ose duke e përdorur atë.

Ju lutemi vazhdoni të lexoni në https://agrawalsuneet.github.io/blogs/filter-operator-kotlin/

Kjo është e gjitha për tani. Ju mund të lexoni blogjet e mia të tjera interesante këtu ose mund të shijoni lojërat ose aplikacionet e mia të listuara këtu. Mos ngurroni të përdorni komponentët e mi të Android me burim të hapur në aplikacionin tuaj të listuar "këtu". Ose dërgoni një email, nëse nuk e keni gjetur atë që po kërkoni dhe keni nevojë për ndihmë.