🌊 Stream API di Java¶
Stream API diperkenalkan di Java 8 untuk memproses koleksi data seperti List, Set, dll., dengan cara yang:
✅ Lebih deklaratif
✅ Lebih efisien
✅ Lebih readable
Think:
data.stream().filter().map().collect()🎯
🔧 Cara Membuat Stream¶
List<String> nama = Arrays.asList("Ali", "Budi", "Cici");
Stream<String> stream = nama.stream();
````
---
## 🚀 Operasi Stream
| Jenis | Operasi | Contoh |
| ------------ | --------------------------------------- | --------------------------------- |
| Intermediate | `filter`, `map`, `sorted` | Mengubah atau menyaring data |
| Terminal | `forEach`, `collect`, `count`, `reduce` | Mengakhiri dan menghasilkan hasil |
---
## 🎯 Contoh: Filter Nama
```java
List<String> nama = Arrays.asList("Ali", "Budi", "Cici");
nama.stream()
.filter(n -> n.startsWith("C"))
.forEach(System.out::println);
// Output: Cici
🔄 map(): Mengubah Isi Koleksi¶
List<String> nama = Arrays.asList("Ali", "Budi", "Cici");
List<String> hurufBesar = nama.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(hurufBesar); // [ALI, BUDI, CICI]
📦 collect(): Mengubah Stream Jadi Koleksi¶
List<Integer> angka = Arrays.asList(1, 2, 3, 4);
List<Integer> genap = angka.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(genap); // [2, 4]
🔢 count(): Menghitung Jumlah Elemen¶
long jumlah = nama.stream().count();
🔁 sorted(): Mengurutkan Elemen¶
List<String> urut = nama.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(urut); // [Ali, Budi, Cici]
🔍 findFirst() dan anyMatch()¶
Optional<String> pertama = nama.stream().findFirst();
boolean adaC = nama.stream().anyMatch(n -> n.startsWith("C"));
🔂 reduce(): Menggabungkan Elemen¶
int total = Arrays.asList(1, 2, 3, 4).stream()
.reduce(0, (a, b) -> a + b);
System.out.println(total); // 10
📌 Studi Kasus: Gaji Pekerja¶
class Pekerja {
String nama;
double gaji;
public Pekerja(String nama, double gaji) {
this.nama = nama;
this.gaji = gaji;
}
public double getGaji() { return gaji; }
public String getNama() { return nama; }
}
List<Pekerja> data = Arrays.asList(
new Pekerja("Ali", 1500),
new Pekerja("Budi", 1800),
new Pekerja("Cici", 2000)
);
double total = data.stream()
.mapToDouble(Pekerja::getGaji)
.sum();
System.out.println("Total gaji: " + total);
⚠️ Catatan¶
- Stream sekali pakai
- Tidak mengubah data asli (immutable)
- Bisa digabung dengan lambda, method reference, dan generics
📌 Kesimpulan¶
| Operasi | Fungsi |
|---|---|
filter() |
Menyaring data |
map() |
Mengubah data |
sorted() |
Mengurutkan |
collect() |
Menghasilkan koleksi baru |
reduce() |
Menggabungkan ke satu nilai |
forEach() |
Iterasi akhir |
➡️ Selanjutnya: Multithreading (Thread & Runnable)