Skip to main content

Pemanfaatan Java Stream API: Contoh Kasus Praktis untuk Pemrogram Sehari-hari

Dalam Java programming, Stream adalah representasi abstrak dari urutan elemen yang dapat diproses secara pipeline (berantai) untuk melakukan operasi seperti filter, sort, map, dan reduce. Stream diperkenalkan di Java 8 sebagai bagian dari Java Stream API dalam paket java.util.stream. Stream memungkinkan pemrogram untuk menulis kode yang lebih deklaratif dan ekspresif, mendukung pemrosesan data dalam jumlah besar secara efisien.

Fitur utama Stream:

  • Operasi Sederhana dan Deklaratif: Programmer dapat menggunakan metode seperti filter(), map(), dan forEach() untuk mengekspresikan apa yang harus dilakukan, tanpa harus mengelola iterasi secara manual.
  • Pipeline: Operasi pada Stream dapat dirangkai menjadi pipeline yang melibatkan operasi intermediate (misalnya filter(), map()) dan terminal (misalnya collect(), forEach()).
  • Laziness: Operasi intermediate bersifat lazy (tidak langsung diproses) sampai operasi terminal dijalankan.
  • Dukungan Paralelisme: Stream dapat diubah menjadi parallel stream untuk memanfaatkan beberapa thread dan mempercepat pemrosesan data.

Contoh penggunaan Stream:

// Filtering and mapping list of names
List<String> names = Arrays.asList("Ananda", "Bobby", "Chandra", "Doni");
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(filteredNames); // Output: [Ananda]

Pada contoh di atas, stream() membuat Stream dari daftar names, lalu filter() memilih elemen yang dimulai dengan huruf "A", map() mengubah elemen yang terpilih menjadi huruf besar, dan collect() mengumpulkan hasilnya ke dalam list baru.

Apakah Array Bisa di Proses Sebagai Stream ?

Ya, array bisa di-loop menggunakan Stream di Java. Anda dapat mengubah array menjadi Stream menggunakan metode Arrays.stream() atau Stream.of(). Setelah array diubah menjadi Stream, Anda dapat menerapkan berbagai operasi seperti forEach() untuk looping.

Contoh looping array menggunakan Stream:

String[] names = {"Ananda", "Bobby", "Chandra", "Doni"};
Arrays.stream(names).forEach(System.out::println);

Contoh filtering array menggunakan Stream:

// Filtering and mapping list of names from an Array
String[] names = {"Ananda", "Bobby", "Chandra", "Doni"};
List<String> filteredNames = Arrays.stream(names).filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
System.out.println(filteredNames); // Output: [Ananda]

Penjelasan:

  • Arrays.stream(array) mengubah array menjadi Stream<String>.
  • forEach(System.out::println) adalah operasi terminal yang melakukan looping pada elemen dan mencetaknya satu per satu.

Penjelasan terkait map:

String[] names = {"Ananda", "Bobby", "Chandra", "Doni"};
List<String> filteredNames = Stream.of(names)
.map(name -> name.equals("Ananda") ? name.toUpperCase() : name)
.collect(Collectors.toList());

System.out.println(filteredNames); // Output: [ANANDA, Bobby, Chandra, Doni]

Pada contoh diatsmap() digunakan untuk memodifikasi elemen-elemen dalam Stream.

Menggunakan Stream.of() untuk hasil yang sama:

String[] names = {"Ananda", "Bobby", "Chandra", "Doni"};
Stream.of(names).forEach(System.out::println); // Prints each of all
List<String> filteredNames = Stream.of(names).filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
System.out.println(filteredNames); // Output: [Ananda]

Kedua cara ini memungkinkan Anda melakukan operasi tambahan seperti filter(), map(), atau operasi lain pada elemen array dalam Stream.

Contoh Java Stream Dalam Pengembangan Sehari-Hari

1. Filter Data dari Koleksi

Menyaring elemen tertentu dari daftar, seperti memilih nama yang lebih panjang dari 4 karakter.

// Filtering and mapping list of names from an Array
List<String> names = Arrays.asList("Ananda", "Bobby", "Chandra", "Doni");
List<String> longNames = names.stream()
.filter(name -> name.length() > 4)
.collect(Collectors.toList());

System.out.println(longNames); // Output: [Ananda, Bobby, Chandra]

2. Mengubah Elemen dalam Koleksi (Mapping)

Mengubah semua elemen dalam daftar menjadi format lain, seperti mengubah semua huruf menjadi huruf besar.

// Filtering and mapping list of names from an Array
List<String> names = Arrays.asList("Ananda", "Bobby", "Chandra", "Doni");
List<String> longNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());

System.out.println(longNames); // Output: [ANANDA, BOBBY, CHANDRA, DONI]

3. Menemukan Elemen dalam Koleksi

Mencari elemen pertama yang memenuhi suatu kriteria, misalnya mencari angka pertama yang lebih besar dari 10.

List<Integer> numbers = Arrays.asList(3, 7, 10, 15, 20);

Optional<Integer> firstGreaterThanTen = numbers.stream()
.filter(num -> num > 10)
.findFirst();

firstGreaterThanTen.ifPresent(System.out::println); // Output: 15

4. Menghitung Elemen

Menghitung jumlah elemen dalam koleksi yang memenuhi kriteria tertentu, seperti menghitung jumlah angka genap.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

long countEvenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.count();

System.out.println(countEvenNumbers); // Output: 3

5. Menggabungkan Elemen (Reduce)

Menggabungkan elemen untuk menghasilkan satu nilai, seperti menjumlahkan semua angka dalam daftar.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

long countEvenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.count();

System.out.println(countEvenNumbers); // Output: 3

6. Menghapus Duplikat

Menghilangkan duplikat dari sebuah daftar.

List<String> items = Arrays.asList("apple", "banana", "apple", "orange", "banana");

List<String> uniqueItems = items.stream()
.distinct()
.collect(Collectors.toList());

System.out.println(uniqueItems); // Output: [apple, banana, orange]

7. Pengurutan Elemen

Mengurutkan elemen dalam koleksi secara ascending atau descending.

List<Integer> numbers = Arrays.asList(5, 2, 8, 3, 1);

List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());

System.out.println(sortedNumbers); // Output: [1, 2, 3, 5, 8]

Semua contoh ini menggambarkan bagaimana Java Stream API mempermudah pemrosesan data dalam koleksi dengan cara yang lebih deklaratif dan efisien dibandingkan dengan iterasi manual menggunakan loop.


Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....