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()
, danforEach()
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 (misalnyacollect()
,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 menjadiStream<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
Post a Comment