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.

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.
def list = [1, 2, 3, 4]
def map = [a: 1, b: 2]
def set = [1, 2, 2, 3] as Set
println list
println setdef 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.
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.
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.
def angka = [1, 2, 3, 4]
def kuadrat = angka.collect { x -> x * x }
println kuadratangka.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 menyaring elemen berdasarkan kondisi closure:
def angka = 1..10
def genap = angka.findAll { x -> x % 2 == 0 }
println genapangka.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.
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.
Penyortiran sangat mudah dengan closure pembanding:
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 adalah kumpulan method tambahan yang disuntikkan Groovy ke kelas standar Java. Contoh untuk 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.textkalimat.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.
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.
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.
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.file.text membaca dan menulis seluruh isi file dalam satu ekspresi.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.