Java - Peningkatan Stream API

Halo, para pengembang Java masa depan! Bagus sekali Anda berada di sini. Hari ini, kita akan memasuki topik yang menarik: Peningkatan Stream API di Java. Jangan khawatir jika Anda baru dalam pemrograman; saya akan mengarahkan Anda melalui setiap konsep langkah demi langkah, seperti yang saya lakukan bagi banyak murid selama tahun-tahun mengajar saya. Jadi, ambil minuman favorit Anda, rasa nyaman, dan mari kita mulai perjalanan Java ini bersama!

Java - Stream API Improvements

Apa Itu Stream API?

Sebelum kita masuk ke peningkatan, mari kita mulai dari dasar. Stream API, diperkenalkan di Java 8, seperti sebuah konveyor magis untuk data Anda. Ini memungkinkan Anda untuk memproses koleksi objek dalam cara deklaratif. Bayangkan Anda memiliki sebuah kotak penuh dengan marmer berwarna-warni, dan Anda ingin mensortirnya, menghitungnya, atau memilih hanya marmer biru. Stream API membantu Anda melakukan semua itu secara efisien dan elegan.

Peningkatan Stream API

Java, seperti seorang siswa telaten, selalu belajar dan meningkatkan diri. Dengan update terbaru, Stream API menjadi lebih baik! Mari kita jelajahi peningkatan ini satu per satu.

Metode takeWhile(Predicate Interface)

Metode takeWhile mirip dengan pengawas di klub eksklusif, tetapi bukan untuk memeriksa ID, melainkan memeriksa kondisi yang Anda tentukan. Itu terus mengambil elemen dari stream selama mereka memenuhi kondisi 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 mirip dengan 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 pengawas yang membolehkan orang masuk, dropWhile adalah pengawas yang menjaga orang keluar... sampai titik tertentu. Itu menjatuhkan elemen selama mereka memenuhi suatu kondisi, lalu menjaga yang lain.

Ini adalah cara kerjanya:

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 mirip dengan seseorang yang takut angka dan menghindari angka genap. Mereka terus menjatuhkan angka sampai mencapai 9 (angka ganjil), lalu menjaga semua yang ada setelah itu, bahkan angka genap!

Metode iterate

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

Ini adalah 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 dengan 1, terus berlanjut selama angka kurang dari 100, dan setiap angka baru adalah ganda angka sebelumnya. Itu mirip dengan legenda papan catur dan biji jagung!

ofNullable

ofNullable mirip dengan pengurus paket yang hati-hati. Itu membuat stream dengan paling banyak satu elemen, memastikan untuk menangani nilai null dengan lembut.

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 mirip dengan seorang penyihir yang bisa membuat sesuatu muncul atau menghilang berdasarkan apakah itu ada!

Menggabungkan Semua

Sekarang kita telah belajar tentang alat-alat baru di dalam kotak 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 menjatuhkan kata-kata dengan 3 atau lebih sedikit huruf (dropWhile)
  2. Kita mengambil kata-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 mirip seperti kita membuat versi baru dan lebih terperinci dari kalimat klasik "quick brown fox"!

Kesimpulan

Dan begitu, teman-teman sekolah! Kita telah menjelajahi peningkatan menarik ke Stream API di Java. Alat-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-murid saya: "Dalam pemrograman, seperti dalam kehidupan, aliran pengetahuan tak pernah berakhir. Tetap belajar, tetap mengoding, dan terutama, tetap bersenang-senang!"

Sampai jumpa lagi, selamat coding!

Credits: Image by storyset