filter, filterNot ve partition
Koşul tabanlı işlevleri kullanarak öğeleri ayırın ve seçin.
filter, filterNot ve partition, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Seçim İşlemleri
Filtreleme, bir koşula uyan öğeleri korur. filterNot, uymayanları korur. Bölümleme, koleksiyonu aynı anda iki listeye ayırır.
Temel Filtreleme
filter { ... }, yalnızca koşulun doğru olduğu öğeleri içeren yeni bir liste döndürür.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val evens = nums.filter { it % 2 == 0 }
println(evens) // [2, 4, 6]
}filterNot
filterNot { ... } bunun tersidir: koşulun yanlış olduğu öğeleri korur. Koşulu tersine çevirmekle aynı sonucu verir, ancak amacı daha açık ifade eder.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val odds = nums.filterNot { it % 2 == 0 }
println(odds) // [1, 3, 5]
}Bölümleme
partition bir Pair döndürür: önce uyan öğeler, ardından uymayanlar gelir. Veriler üzerinde iki kez dolaşılması önlenir.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val (evens, odds) = nums.partition { it % 2 == 0 }
println("evens=$evens odds=$odds")
}Veri Sınıfıyla Bölümleme
Kayıt listesini tek geçişte iki gruba ayırın.
data class User(val name: String, val active: Boolean)
fun main() {
val users = listOf(User("Ada", true), User("Ben", false), User("Cal", true))
val (active, inactive) = users.partition { it.active }
println("active=${active.map { it.name }}")
println("inactive=${inactive.map { it.name }}")
}filterIndexed
Koşul hem dizini hem de değeri alır; konumun önemli olduğu durumlarda kullanışlıdır.
fun main() {
val nums = listOf(10, 20, 30, 40, 50)
val every2nd = nums.filterIndexed { i, _ -> i % 2 == 0 }
println(every2nd) // [10, 30, 50]
}filterIsInstance
Yalnızca belirli bir türdeki öğeleri korur; içeride akıllı tür dönüşümleri yapılır.
fun main() {
val mixed: List<Any> = listOf(1, "hello", 2.0, "world", 3)
val onlyStrings = mixed.filterIsInstance<String>()
println(onlyStrings) // [hello, world]
}filterNotNull
Null olabilen bir listeden null girdileri çıkarır; null olmayan öğelerden oluşan bir liste döndürür.
fun main() {
val mixed: List<String?> = listOf("a", null, "b", null, "c")
val nonNull = mixed.filterNotNull()
println(nonNull) // [a, b, c]
}Filtreleme ve Eşlemeyi Zincirleme
Seçim ve dönüştürme işlem zincirleri için filter ile map'i birleştirin.
data class Product(val name: String, val price: Double, val inStock: Boolean)
fun main() {
val products = listOf(
Product("Pen", 1.0, true),
Product("Book", 12.0, false),
Product("Lamp", 25.0, true)
)
val availableNames = products.filter { it.inStock }.map { it.name }
println(availableNames) // [Pen, Lamp]
}Açıklık İçin filterNot ile Olumsuzlama
Bazen filterNot { it.isActive }, filter { !it.isActive } ifadesinden daha okunaklıdır.
data class Task(val title: String, val done: Boolean)
fun main() {
val tasks = listOf(Task("Email", true), Task("Lunch", false), Task("Code", true))
val pending = tasks.filterNot { it.done }
println(pending) // [Task(title=Lunch, done=false)]
}Bölümleme Listeler Döndürür
partition işleminden gelen Pair, iki normal Liste içerir; bu listeleri parçalarına ayırabilir veya .first / .second ile erişebilirsiniz.
fun main() {
val nums = (1..10).toList()
val result = nums.partition { it > 5 }
println("above 5: ${result.first}")
println("below 6: ${result.second}")
}Bölümleme ve İki Filtreleme Çağrısı
Her iki alt kümeye de ihtiyacınız varsa partition daha hızlıdır; iki geçiş yerine tek geçiş yapar.
fun main() {
val nums = (1..10).toList()
// Two passes:
val a = nums.filter { it > 5 }
val b = nums.filter { it <= 5 }
// One pass:
val (c, d) = nums.partition { it > 5 }
println("$a $b")
println("$c $d")
}Hızlı Kontrol
Tek geçişte hem uyan hem de uymayan öğeleri döndüren işlev hangisidir?
Özet
Filtreleme uyanları seçer; filterNot uymayanları seçer; Bölümleme her iki grubu tek geçişte döndürür. Bir türdeki öğeleri korumak için filterIsInstance, null değerleri kaldırmak için filterNotNull kullanın. Seçim ve dönüştürme için map ile zincirleyin.
Sıkça Sorulan Sorular
“filter, filterNot ve partition” dersi ücretsiz mi?
Evet — “filter, filterNot ve partition” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“filter, filterNot ve partition” dersinde ne öğreneceğim?
Koşul tabanlı işlevleri kullanarak öğeleri ayırın ve seçin. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“filter, filterNot ve partition” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- map ve flatMap: Her Öğeyi Dönüştürme
- filter, filterNot ve partition
- fold, reduce ve runningFold
- Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma