Pelajaran modul (2/2)
Aliran API
Stream API di Java memungkinkan Anda memproses kumpulan objek dengan cara deklaratif, memanfaatkan pemrograman fungsional. Aliran tidak menyimpan data, namun membawa elemen dari sumber (seperti daftar atau larik) melalui alur operasi.
Pipa aliran terdiri dari tiga bagian:
- Sumber (misalnya,
list.stream()) - Tidak ada atau lebih operasi perantara (yang mengembalikan Aliran baru, misalnya,
filter,map) - Operasi terminal (yang menghasilkan hasil akhir atau efek samping dan menutup Aliran, misalnya,
collect,forEach,reduce)
Operasi Menengah Umum
Operasi perantara bersifat malas: operasi tersebut tidak dijalankan sampai operasi terminal dipanggil.
filter(Predicate): memfilter elemen berdasarkan kondisi boolean.map(Function): mengubah setiap elemen menjadi objek lain dengan menerapkan fungsi.sorted(): mengurutkan elemen Aliran.
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
.filter(name -> name.startsWith("M"))
.map(name -> name.toUpperCase())
.collect(Collectors.toList()); // "MARCO"Operasi Terminal Umum
forEach(Consumer): melakukan tindakan untuk setiap elemen Aliran.collect(Collector): mengumpulkan hasil Aliran ke dalam wadah (misalnya, daftar menggunakanCollectors.toList()).reduce(identity, BinaryOperator): menggabungkan elemen Stream menjadi satu nilai kumulatif.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b); // Sums all numbers: 10Cobalah sendiri
Lengkapi kode menggunakan aliran angka untuk memfilter hanya angka genap, kumpulkan ke dalam Daftar baru bernama genap, dan cetak menggunakan System.out.println.
Tunjukkan petunjuk
Mulailah dengan memanggil `numbers.stream()`, tambahkan `.filter(n -> n % 2 == 0)`, dan terakhir kumpulkan dengan `.collect(Collectors.toList())`.
Solusi tersedia setelah 3 upaya
Gunakan aliran untuk mengubah semua nama di dalam daftar nama menjadi huruf besar menggunakan peta, dan mencetaknya satu per satu menggunakan forEach dengan referensi metode.
Tunjukkan petunjuk
Gunakan `.map(s -> s.toUpperCase())` diikuti dengan operasi terminal `.forEach(System.out::println)`.
Solusi tersedia setelah 3 upaya
Lengkapi kode dengan menghitung jumlah semua angka dalam daftar angka menggunakan operasi Stream dan terminal pengurangan dengan nilai awal 0. Cetak jumlahnya.
Tunjukkan petunjuk
Gunakan `numbers.stream().reduce(0, (a, b) -> a + b)` dan cetak variabel yang dihasilkan.
Solusi tersedia setelah 3 upaya