Java - Peningkatan Stream API

Hai, para pengembang Java masa depan! Bagus sekali Anda berada di sini. Hari ini, kita akan mendalami topik yang menarik: Peningkatan Stream API di Java. Jangan khawatir jika Anda baru belajar pemrograman; saya akan mengarahkan Anda secara langkah demi langkah untuk setiap konsep, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, ambil minuman favorit Anda, duduk nyaman, dan mari kita mulai perjalanan Java ini bersama!

Java - Stream API Improvements

Apa Itu Stream API?

Sebelum kita melompat ke peningkatan, mari kita mulai dari dasar. Stream API, yang diperkenalkan di Java 8, adalah seperti sebuah konveyor magis untuk data Anda. Ini memungkinkan Anda untuk memproses koleksi objek secara deklaratif. Bayangkan Anda memiliki kotak penuh kelereng berwarna-warni, dan Anda ingin mengurutkan, menghitung, atau memilih hanya kelereng biru. Stream API membantu Anda melakukan semua itu secara efisien dan elegan.

Peningkatan Stream API

Java, seperti seorang siswa yang rajin, selalu belajar dan memperbaiki diri. Dengan pembaruan terbaru, Stream API menjadi lebih baik! Mari kita jelajahi peningkatan ini satu per satu.

Metode takeWhile(Predicate Interface)

Metode takeWhile adalah seperti seorang bouncer di klub eksklusif, tapi bukan untuk memeriksa ID, melainkan memeriksa syarat yang Anda tentukan. Itu terus mengambil elemen dari stream selama mereka memenuhi syarat ini.

mari lihatnya dalam aksi:

List<String> buah = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
List<String> hasil = buah.stream()
.takeWhile(buah -> buah.length() <= 5)
.collect(Collectors.toList());
System.out.println(hasil);

Output:

[apple]

Dalam contoh ini, takeWhile adalah seperti seorang petani buah yang berhenti saat mereka menemukan buah dengan lebih dari 5 huruf. Itu mengambil "apple" tapi berhenti di "banana" karena terlalu panjang.

Metode dropWhile(Predicate Interface)

Jika takeWhile adalah bouncer yang membolehkan orang masuk, dropWhile adalah bouncer yang menjaga orang keluar... sampai titik tertentu. Itu menjauhkan elemen selama mereka memenuhi syarat, lalu menjaga sisanya.

mari lihat bagaimana itu bekerja:

List<Integer> angka = Arrays.asList(2, 4, 6, 8, 9, 10, 12);
List<Integer> hasil = angka.stream()
.dropWhile(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(hasil);

Output:

[9, 10, 12]

Dalam kasus ini, dropWhile adalah seperti seseorang yang takut angka dan menghindari angka genap. Mereka terus menjauhkan angka sampai mereka mencapai 9 (angka ganjil), lalu mereka menjaga semua angka setelah itu, bahkan angka genap!

Metode iterate

Metode iterate adalah seperti generator cerita. Anda memberikan titik awal, cara untuk memeriksa apakah cerita harus berlanjut, dan cara untuk membuat bab berikutnya.

mari lihat contohnya:

Stream<Integer> angka = Stream.iterate(1, n -> n < 100, n -> n * 2);
angka.forEach(System.out::println);

Output:

1
2
4
8
16
32
64

Dalam cerita ini, kita mulai dari 1, terus berlanjut selama angka kurang dari 100, dan setiap angka baru adalah dua kali lipat angka sebelumnya. Itu seperti legenda papan catur dan biji jagung!

ofNullable

ofNullable adalah seperti seorang pengurus paket yang hati-hati. Itu membuat stream dari paling banyak satu elemen, memastikan untuk menangani nilai null dengan baik.

mari lihatnya dalam aksi:

String nama = null;
Stream<String> stream = Stream.ofNullable(nama);
System.out.println(stream.count());

nama = "Alice";
stream = Stream.ofNullable(nama);
System.out.println(stream.count());

Output:

0
1

Ketika nama adalah null, ofNullable membuat stream kosong. Ketika nama memiliki nilai, itu membuat stream dengan nilai itu. Itu seperti seorang ahli sihir yang dapat membuat sesuatu muncul atau hilang tergantung apakah itu ada!

Menggabungkan Semua

Sekarang kita telah belajar tentang alat-alat baru di dalam kotak peralatan Java kita, mari kita gunakan semuanya dalam satu contoh:

List<String> kata = Arrays.asList("The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog");

List<String> hasil = kata.stream()
.dropWhile(kata -> kata.length() <= 3)
.takeWhile(kata -> !kata.equals("over"))
.flatMap(kata -> Stream.ofNullable(kata.toLowerCase()))
.collect(Collectors.toList());

System.out.println(hasil);

Output:

[quick, brown, fox, jumps]

Dalam contoh ini, kita memproses daftar kata:

  1. Kita menjauhkan kata dengan 3 atau lebih sedikit huruf (dropWhile)
  2. Kita mengambil kata sampai kita mencapai "over" (takeWhile)
  3. Kita konversi setiap kata ke huruf kecil, menangani kemungkinan null (flatMap dengan ofNullable)
  4. Akhirnya, kita mengumpulkan hasilnya ke dalam daftar baru

Itu seperti kita membuat versi baru dan lebih halus dari kalimat klasik "quick brown fox"!

Kesimpulan

Dan begitu, teman-teman sekolah! Kita telah mengeksplor peningkatan menarik ke Stream API Java. Alat ini membuat kerja dengan stream lebih fleksibel dan kuat daripada sebelumnya. Ingat, seperti belajar keterampilan baru, menguasai konsep ini memerlukan latihan. Jadi jangan takut untuk mencoba dan bermain dengan metode ini dalam kode Anda sendiri.

Saat kita mengakhiri, saya teringat ungkapan yang saya sering bagikan kepada murid-muridku: "Dalam pemrograman, seperti dalam kehidupan, aliran pengetahuan tak pernah berakhir. Tetap belajar, tetap kode, dan terutama, tetap bersenang-senang!"

Sampaijumpa lagi, selamat coding!

Credits: Image by storyset