Belajar Kotlin - Collection & Standard Library
Episode 5 of 23

Belajar Kotlin - Collection & Standard Library

Episode ini menguasai collection dan standard library Kotlin: List, Set, dan Map beserta operasi koleksinya, higher-order functions seperti map, filter, fold, dan flatMap, sequences dengan lazy evaluation, serta manipulasi string dan utility functions standar.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

OOP sudah kalian kuasai di episode 4. Sekarang saatnya memanfaatkan kekuatan terbesar Kotlin: standard library dengan collection API yang sangat kaya. Dengan kombinasi List, Set, Map, dan higher-order functions, kalian bisa menulis transformasi data yang di Java butuh puluhan baris dalam satu ekspresi.

Standard library Kotlin dirancang fungsional: alih-alih menulis loop manual, kalian mengungkapkan niat dengan filter, map, dan fold. Kode menjadi deklaratif, lebih pendek, dan lebih mudah diuji.

Episode 5 ini akan membangun kebiasaan yang kalian pakai di seluruh series — dari episode 6 sampai episode 22.

Tiga Collection Utama

List, Set, dan Map

Kotlin membedakan collection read-only dan mutable: listOf dan mutableListOf, setOf dan mutableSetOf, mapOf dan mutableMapOf. Collection read-only tidak bisa diubah, meskipun isinya tetap terlihat:

KotlinList, Set, Map
val daftar = listOf("apel", "pisang", "ceri")
val unik = setOf(1, 1, 2, 3)
val harga = mapOf("kopi" to 15000, "teh" to 8000)
 
println(daftar[0])
println(unik) // [1, 2, 3]
println(harga["kopi"])

setOf otomatis menghilangkan duplikat, dan mapOf menyimpan pasangan key-value yang ditulis dengan infix to. Perhatikan bahwa koleksi ini read-only — untuk menambah elemen, pakai varian mutable.

Collection vs Mutable

Perbedaan penting: List dan MutableList adalah dua interface berbeda. Fungsi menerima List menjanjikan tidak mengubah isi; fungsi yang perlu mengubah memakai MutableList. Disiplin ini membuat kontrak fungsi lebih jelas dan mencegah efek samping yang tidak terduga.

Higher-order Functions

map, filter, dan forEach

Operasi collection paling sering dipakai adalah map untuk transformasi dan filter untuk penyaringan. Keduanya menerima lambda sebagai argumen:

Kotlinmap dan filter
val angka = listOf(1, 2, 3, 4, 5, 6)
 
val kuadrat = angka.map { it * it }
val genap = angka.filter { it % 2 == 0 }
 
println(kuadrat) // [1, 4, 9, 16, 25, 36]
println(genap) // [2, 4, 6]

Lambda { it * it } memakai nama implisit it untuk elemen tunggal. Ekspresi filter di atas pada dasarnya menjalankan loop dengan maksud yang jelas — jauh lebih terbaca daripada loop manual. Kalian bisa menguji seluruh contoh dengan kotlinc Koleksi.kt -include-runtime -d koleksi.jar dan menjalankan JAR yang dihasilkan.

fold dan flatMap

fold mengakumulasi seluruh elemen menjadi satu nilai dengan nilai awal tertentu. flatMap menggabungkan hasil transformasi yang berupa collection menjadi satu list datar:

Kotlinfold dan flatMap
val angka = listOf(1, 2, 3, 4, 5)
 
val total = angka.fold(0) { akumulator, nilai -> akumulator + nilai }
val pasangan = listOf("ab", "cd").flatMap { it.toList() }
 
println(total) // 15
println(pasangan) // [a, b, c, d]

fold(0) memakai 0 sebagai nilai awal, lalu lambda menerima akumulator dan elemen. flatMap mem-flatten hasil — pola yang sering dipakai untuk membangun daftar dari relasi satu-ke-banyak.

Sequences dan Lazy Evaluation

Kapan Memakai Sequence

Pada collection biasa, setiap operasi langsung menciptakan collection baru. Rantai map lalu filter akan memproses seluruh elemen dua kali dan mengalokasikan collection perantara. Sequence mengatasi ini dengan evaluasi lazy: elemen diproses satu per satu hanya saat dibutuhkan:

KotlinSequence untuk lazy evaluation
val hasil = (1..1_000_000)
    .asSequence()
    .filter { it % 3 == 0 }
    .map { it * it }
    .take(5)
    .toList()
 
println(hasil)

Dengan asSequence(), operasi filter dan map menunggu sampai take(5) dan toList() dipanggil. Untuk dataset besar atau rantai operasi panjang, sequence menghemat alokasi dan waktu — ukuran mental yang perlu kalian pegang dari sekarang.

Kapan Tidak Perlu

Untuk collection kecil, sequence malah menambah overhead. Aturan praktis: pakai collection biasa untuk data kecil dan sederhana, beralih ke sequence saat data besar, rantai operasi panjang, atau saat mengambil hanya sebagian kecil hasil.

String Manipulation dan Utility Functions

Fungsi String yang Sering Dipakai

Standard library menyediakan banyak fungsi string yang ringkas. Beberapa yang paling sering dipakai:

KotlinManipulasi string
val teks = "  Kotlin itu Keren  "
 
println(teks.trim())
println(teks.uppercase())
println(teks.lowercase())
println(teks.replace("Keren", "Powerful"))
println("a,b,c".split(","))
println("hello".repeat(3))

trim, uppercase, replace, split, dan repeat adalah sebagian dari toolbox string. Ada juga contains, startsWith, substringAfter, dan removeSuffix yang akan kalian temui terus-menerus di kode produksi.

Utility Functions: take, drop, chunked, zip

Fungsi utilitas collection lainnya melengkapi gudang senjata kalian:

KotlinUtilitas collection
val daftar = (1..10).toList()
 
println(daftar.take(3))       // [1, 2, 3]
println(daftar.drop(7))       // [8, 9, 10]
println(daftar.chunked(3))    // kelompok berisi 3
println(daftar.zip(daftar))   // pasangan elemen

take dan drop memotong dari depan, chunked memecah menjadi kelompok berukuran sama, dan zip menggabungkan dua collection menjadi pasangan. Kombinasi utilitas ini menulis logika pemrosesan yang biasanya panjang menjadi ekspresi satu baris.

Penutup

Episode 5 membuka kekuatan collection dan standard library: List, Set, dan Map dengan kontrak read-only, higher-order functions seperti map, filter, fold, dan flatMap, sequence untuk evaluasi lazy pada data besar, serta beragam fungsi string dan utilitas collection.

Inti yang harus dibawa pulang:

  • Collection read-only dengan listOf dan mutable dengan mutableListOf.
  • map mentransformasi, filter menyaring, fold mengakumulasi.
  • flatMap menggabungkan hasil transformasi menjadi list datar.
  • Sequence memberi lazy evaluation untuk data besar dan rantai panjang.
  • String library menyediakan trim, split, replace, repeat, dan lainnya.
  • Utilitas seperti take, drop, chunked, dan zip menulis logika ringkas.

Di episode 6 selanjutnya kita akan membahas null safety dan type system — nullable types dan safe call operator, elvis operator dan non-null assertions, smart casts dan type inference, hingga inline classes dan value classes yang membuat kode kalian aman dari null sejak kompilasi.

Belajar Kotlin - Collection & Standard Library | Belajar Kotlin