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

Numpang Kerja Remote dari Bandung Digital Valley

Cara Decompile berkas Dex dan Apk Android