Transformasi
map, filter, flatMap.
Transformasi adalah pelajaran Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Mentransformasikan koleksi
Koleksi Scala secara bawaan bersifat tak dapat diubah. Alih-alih memodifikasinya, Anda mentransformasikannya menjadi koleksi baru menggunakan metode seperti map, filter, dan flatMap.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4)
val doubled = nums.map(_ * 2)
println(nums)
println(doubled)
}
}map: mentransformasikan setiap elemen
map menerapkan fungsi pada setiap elemen dan mengembalikan koleksi baru dengan ukuran yang sama. Jenis elemennya dapat berubah.
object Main {
def main(args: Array[String]): Unit = {
val words = List("scala", "rocks")
val lengths = words.map(_.length)
println(lengths)
}
}Singkatan garis bawah
Garis bawah _ adalah singkatan untuk satu parameter fungsi. _ * 2 berarti x => x * 2. Ini membuat transformasi sederhana tetap ringkas.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(10, 20, 30)
println(nums.map(_ + 1))
println(nums.map(x => x + 1))
}
}filter: mempertahankan elemen yang cocok
filter hanya mempertahankan elemen yang predikatnya mengembalikan true. Hasilnya mungkin lebih kecil daripada hasil asli.
object Main {
def main(args: Array[String]): Unit = {
val nums = (1 to 10).toList
val evens = nums.filter(_ % 2 == 0)
println(evens)
}
}filterNot: kebalikannya
filterNot mempertahankan elemen yang predikatnya bernilai false. Ini adalah komplemen dari filter.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
println(nums.filterNot(_ % 2 == 0))
}
}flatMap: memetakan lalu meratakan
flatMap menerapkan fungsi yang mengembalikan koleksi untuk setiap elemen, lalu meratakan hasilnya menjadi satu koleksi.
object Main {
def main(args: Array[String]): Unit = {
val words = List("ab", "cd")
val chars = words.flatMap(_.toList)
println(chars)
}
}map versus flatMap
Jika fungsi Anda mengembalikan koleksi, map menghasilkan koleksi bersarang, sedangkan flatMap menghasilkan koleksi datar. Pilih berdasarkan bentuk yang Anda inginkan.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3)
println(nums.map(n => List(n, n)))
println(nums.flatMap(n => List(n, n)))
}
}flatMap dengan Option
flatMap pada daftar yang berisi Option membuang nilai None dan membuka nilai Some, cara praktis untuk memfilter dan mentransformasikan sekaligus.
object Main {
def main(args: Array[String]): Unit = {
val raw = List("1", "x", "3", "y")
val parsed = raw.flatMap(_.toIntOption)
println(parsed)
}
}collect: memfilter dan memetakan sekaligus
collect menerima fungsi parsial: metode ini mempertahankan dan mentransformasikan hanya elemen yang didefinisikan oleh fungsi tersebut, sehingga menggabungkan filter dan map dalam satu lintasan.
object Main {
def main(args: Array[String]): Unit = {
val mixed: List[Any] = List(1, "two", 3, "four", 5)
val ints = mixed.collect { case i: Int => i * 10 }
println(ints)
}
}Merangkai transformasi
Karena setiap metode mengembalikan koleksi baru, Anda dapat merangkainya menjadi alur yang mudah dibaca. Setiap langkah mentransformasikan keluaran dari langkah sebelumnya.
object Main {
def main(args: Array[String]): Unit = {
val result = List(1, 2, 3, 4)
.map(_ + 1)
.filter(_ % 2 == 0)
println(result)
}
}Alur yang rapi
Berikut alur transformasi yang rapi: filter angka genap, kuadratkan, lalu pertahankan angka yang besar. Alur seperti ini terbaca seperti deskripsi aliran data.
object Main {
def main(args: Array[String]): Unit = {
val result = (1 to 10).toList
.filter(_ % 2 == 0)
.map(x => x * x)
.filter(_ > 10)
println(result)
}
}Pemeriksaan Cepat
Apa yang dikembalikan oleh List("ab", "cd").flatMap(_.toList)?
Ringkasan
Anda telah mempelajari transformasi inti:
map— mengubah setiap elemen, dengan ukuran yang samafilter/filterNot— mempertahankan atau membuang elemen berdasarkan predikatflatMap— memetakan lalu meratakan hasil bersarangcollect— memfilter dan memetakan dengan fungsi parsial- Rangkailah semuanya menjadi alur pemrosesan yang mudah dibaca dan tidak dapat diubah
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Transformasi” gratis?
Ya — teks lengkap “Transformasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Transformasi”?
map, filter, flatMap. Kamu berlatih Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?
Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming 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 “Transformasi” 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 Scala for Backend Engineering & Functional Programming ini?
Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.