Belajar Groovy - Collections & Groovy JDK
Episode 6 of 23

Belajar Groovy - Collections & Groovy JDK

Episode ini membedah Collection API Groovy untuk List, Map, dan Set, termasuk iterasi berbasis closure dengan each, collect, dan findAll. Kalian juga akan melihat Groovy JDK enhancements untuk String, File, I/O, dan Date yang menyederhanakan pemrosesan data.

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

Pendahuluan

Aplikasi nyata jarang berurusan dengan satu nilai; hampir selalu ada banyak nilai yang harus diolah. Di sinilah collections berperan, dan Groovy JDK menjadikan pengolahan data sebagai aktivitas yang sangat ekspresif.

Episode 6 membahas Collection API untuk List, Map, dan Set, iterasi berbasis closure dengan each, collect, dan findAll, serta berbagai enhancement Groovy untuk String, File, I/O, dan Date. Kalian akan menyelesaikan episode ini dengan kemampuan mengolah data secara deklaratif.

Collection API Dasar

List, Map, dan Set

Literal List, Map, dan Set
def list = [1, 2, 3, 4]
def map = [a: 1, b: 2]
def set = [1, 2, 2, 3] as Set
 
println list
println set

def set = [1, 2, 2, 3] as Set mengkonversi list menjadi set, menghapus duplikat sehingga hasilnya [1, 2, 3]. Operator as adalah cara idiomatis Groovy untuk konversi tipe.

Operasi Umum pada Collection

Operasi dasar collection
def a = [1, 2, 3]
def b = [4, 5]
 
a << 6
println a + b
println a.size()
println a.contains(2)

a << 6 menambahkan elemen, a + b menggabungkan dua list tanpa mengubah keduanya, dan a.size() menghitung panjangnya. a + b mengembalikan list baru, sedangkan operator += memodifikasi list asli.

Iterasi Berbasis Closure

each: Iterasi Sederhana

Iterasi dengan each
def namaList = ["Arman", "Budi", "Citra"]
namaList.each { nama ->
    println "Halo, ${nama}"
}

namaList.each { nama -> println "Halo, ${nama}" } menjalankan closure untuk setiap elemen. Untuk closure dengan satu parameter, Groovy menyediakan variabel implisit it, sehingga body bisa lebih pendek.

collect: Transformasi

Transformasi dengan collect
def angka = [1, 2, 3, 4]
def kuadrat = angka.collect { x -> x * x }
println kuadrat

angka.collect { x -> x * x } menghasilkan [1, 4, 9, 16]. Method ini setara dengan map di bahasa lain, dan membentuk pipeline data tanpa loop eksplisit.

findAll: Penyaringan

findAll menyaring elemen berdasarkan kondisi closure:

Penyaringan dengan findAll
def angka = 1..10
def genap = angka.findAll { x -> x % 2 == 0 }
println genap

angka.findAll { x -> x % 2 == 0 } mengembalikan hanya bilangan genap dari range 1 sampai 10. Kombinasi findAll dan collect adalah fondasi pola transformasi data yang akan kalian pakai terus-menerus.

Method Collection Lainnya

find, groupBy, dan sum

find, groupBy, dan sum
def data = [
    [nama: "A", nilai: 80],
    [nama: "B", nilai: 90],
    [nama: "C", nilai: 85]
]
 
def pertama = data.find { it.nilai > 85 }
println pertama.nama
 
def total = data.sum { it.nilai }
println total
 
def kelompok = data.groupBy { it.nilai >= 85 ? "tinggi" : "rendah" }
println kelompok.keySet()

data.find { it.nilai > 85 } mengembalikan elemen pertama yang memenuhi kondisi, data.sum { it.nilai } menjumlahkan seluruh nilai, dan groupBy mengelompokkan data ke dalam map berdasarkan hasil closure.

Sort dan Reverse

Penyortiran sangat mudah dengan closure pembanding:

Sorting dengan closure
def nilai = [85, 90, 80, 95]
println nilai.sort()
println nilai.sort { a, b -> b <=> a }

nilai.sort() mengurutkan secara ascending, dan nilai.sort { a, b -> b <=> a } mengurutkan descending memakai operator spaceship <=>. Sorting kompleks untuk objek cukup dengan mengembalikan field yang dibandingkan.

Groovy JDK Enhancements

String dan File

Groovy JDK adalah kumpulan method tambahan yang disuntikkan Groovy ke kelas standar Java. Contoh untuk String dan File:

Enhancement String dan File
def kalimat = "groovy itu hebat"
println kalimat.capitalize()
println kalimat.tokenize()
 
def file = new File("/tmp/contoh.txt")
file.text = "Halo dari Groovy"
println file.text

kalimat.capitalize() mengubah huruf pertama menjadi kapital, dan kalimat.tokenize() memecah string menjadi list kata. Untuk file, file.text = "Halo dari Groovy" menulis seluruh isi file sekaligus — enhancement yang sangat berguna untuk scripting.

I/O dan Date

Enhancement I/O dan Date
import java.time.LocalDate
 
def tanggal = LocalDate.now()
println tanggal.plusDays(7)
 
new File("/tmp/daftar.txt").withReader { reader ->
    reader.eachLine { baris ->
        println "Baca: ${baris}"
    }
}

tanggal.plusDays(7) memanfaatkan method Date/Time API modern, dan withReader membuka file, mengiterasi setiap baris, lalu menutup reader secara otomatis — tidak ada resource leak.

Pipeline Data Deklaratif

Menggabungkan Semua Konsep

Pipeline data dengan collection
def hasil = (1..100)
    .findAll { it % 3 == 0 }
    .collect { it * it }
    .sum()
 
println hasil

(1..100).findAll { it % 3 == 0 } menyaring kelipatan tiga, collect { it * it } mengkuadratkan, lalu sum() menjumlahkan semuanya. Chaining seperti ini membuat pemrosesan data terbaca seperti spesifikasi, bukan rangkaian loop.

Penutup

Episode 6 membekali kalian dengan kemampuan pengolahan data: literal List, Map, dan Set, iterasi berbasis closure dengan each, collect, findAll, method seperti find, groupBy, sum, serta enhancement Groovy JDK untuk String, File, I/O, dan Date.

Inti yang harus dibawa pulang:

  • as Set mengkonversi collection dan menghapus duplikat.
  • each untuk iterasi, collect untuk transformasi, findAll untuk filter.
  • find, groupBy, dan sum melengkapi toolkit pengolahan data.
  • Groovy JDK menambah method praktis ke kelas Java standar.
  • file.text membaca dan menulis seluruh isi file dalam satu ekspresi.
  • Chaining collection method membentuk pipeline data deklaratif.

Di episode 7 selanjutnya kita akan membahas exception handling dan debugging — try/catch/finally, multi-catch, resource management, custom exception, serta cara debugging script Groovy dan memeriksa nilai runtime.