filter, filterNot, dan partition
Pisahkan dan pilih elemen menggunakan fungsi berbasis predicate.
filter, filterNot, dan partition adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Operasi Pemilihan
Penyaringan mempertahankan elemen yang cocok dengan predikat. filterNot mempertahankan elemen yang TIDAK cocok. Partisi membagi koleksi menjadi dua daftar sekaligus.
Penyaringan Dasar
filter { ... } mengembalikan daftar baru yang hanya berisi elemen dengan predikat bernilai benar.
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 { ... } adalah kebalikannya: pertahankan elemen dengan predikat bernilai salah. Hasilnya sama seperti menegasikan predikat, tetapi maksudnya lebih jelas.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val odds = nums.filterNot { it % 2 == 0 }
println(odds) // [1, 3, 5]
}Partisi
partition mengembalikan Pair: elemen yang cocok berada di bagian pertama, sedangkan yang tidak cocok berada di bagian kedua. Cara ini menghindari dua lintasan pada data.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val (evens, odds) = nums.partition { it % 2 == 0 }
println("evens=$evens odds=$odds")
}Partisi dengan Kelas Data
Pisahkan daftar rekaman menjadi dua kelompok dalam satu lintasan.
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
Predikat menerima indeks dan nilai sekaligus—berguna ketika posisi berpengaruh.
fun main() {
val nums = listOf(10, 20, 30, 40, 50)
val every2nd = nums.filterIndexed { i, _ -> i % 2 == 0 }
println(every2nd) // [10, 30, 50]
}filterIsInstance
Pertahankan hanya elemen dengan tipe tertentu—konversi cerdas berlaku di dalamnya.
fun main() {
val mixed: List<Any> = listOf(1, "hello", 2.0, "world", 3)
val onlyStrings = mixed.filterIsInstance<String>()
println(onlyStrings) // [hello, world]
}filterNotNull
Hapus entri null dari daftar yang elemennya dapat bernilai null—mengembalikan daftar elemen yang tidak null.
fun main() {
val mixed: List<String?> = listOf("a", null, "b", null, "c")
val nonNull = mixed.filterNotNull()
println(nonNull) // [a, b, c]
}Merangkai Penyaringan dan Pemetaan
Gabungkan filter dan map untuk alur pemrosesan pemilihan sekaligus transformasi.
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]
}Meniadakan dengan filterNot demi Kejelasan
Terkadang filterNot { it.isActive } lebih mudah dibaca daripada filter { !it.isActive }.
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)]
}Partisi Menghasilkan Daftar
Pair dari partition berisi dua List biasa—uraikan keduanya atau akses melalui .first / .second.
fun main() {
val nums = (1..10).toList()
val result = nums.partition { it > 5 }
println("above 5: ${result.first}")
println("below 6: ${result.second}")
}Partisi vs Dua Pemanggilan Penyaringan
Jika Anda memerlukan kedua subset, partition lebih cepat—satu lintasan, bukan dua.
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")
}Pemeriksaan Cepat
Fungsi mana yang mengembalikan BOTH elemen yang cocok dan yang tidak cocok dalam satu lintasan?
Ringkasan
Penyaringan memilih elemen yang cocok; filterNot memilih elemen yang tidak cocok; Partisi mengembalikan kedua kelompok dalam satu lintasan. Gunakan filterIsInstance untuk mempertahankan elemen dengan suatu tipe dan filterNotNull untuk membuang nilai null. Rangkaikan dengan map untuk pemilihan sekaligus transformasi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “filter, filterNot, dan partition” gratis?
Ya — teks lengkap “filter, filterNot, dan partition” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “filter, filterNot, dan partition”?
Pisahkan dan pilih elemen menggunakan fungsi berbasis predicate. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Kotlin Academy?
Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “filter, filterNot, dan partition” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?
Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- map dan flatMap: Mengubah Setiap Elemen
- filter, filterNot, dan partition
- fold, reduce, dan runningFold
- Merangkai Pipeline dan Menghindari List Perantara dengan Sequence