crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Java Stream API, Java 8 ile hayatımıza giren ve koleksiyonlar (List, Set, Map vb.) üzerinde deklaratif (ne yapılacağını söyleyen) bir şekilde işlem yapmamızı sağlayan devrim niteliğinde bir özelliktir. Geleneksel for döngüleri yerine, veriyi bir boru hattından (pipeline) geçirir gibi filtreleyebilir, dönüştürebilir ve sonuçlandırabiliriz.
İşte Java Stream dünyasının temel taşları:
Bir Stream işlemi üç aşamadan oluşur:
Kaynak (Source): Verinin geldiği yer (Örn: liste.stream()).
Ara İşlemler (Intermediate Operations): Veriyi dönüştüren veya süzen işlemler. (Lazy çalışırlar, terminal işlemi gelene kadar icra edilmezler).
Terminal İşlemi (Terminal Operation): Akışı sonlandırıp sonucu üreten işlem (Örn: collect(), forEach()).
Diyelim ki elimizde bir Personel listesi var. Maaşı 20.000 TL'den fazla olanların isimlerini büyük harfle ve alfabetik sırada getirmek istiyoruz:
Okunabilirlik: Kod, ne yapıldığını anlatan bir İngilizce metin gibi okunur.
Daha Az Kod: 10 satırlık for ve if blokları 2-3 satıra iner.
Paralel İşleme: Sadece .stream() yerine .parallelStream() yazarak çok çekirdekli işlemcilerin gücünden faydalanabilirsiniz.
Sonuç
Stream API, modern Java geliştiriciliğinin vazgeçilmezidir. Veri yığınlarını yönetmek, raporlar oluşturmak ve karmaşık filtreleme mantıklarını temiz bir şekilde yazmak için en güçlü silahınızdır. Ancak unutmayın; Stream bir veri yapısı değildir, veriyi bir yerden alıp bir yere taşıyan bir akıştır.
İşte Java Stream dünyasının temel taşları:
Java Stream API: Veri İşleme Boru Hattı
1. Stream Mantığı: Kaynak, Ara İşlem ve Terminal
Bir Stream işlemi üç aşamadan oluşur:
Kaynak (Source): Verinin geldiği yer (Örn: liste.stream()).
Ara İşlemler (Intermediate Operations): Veriyi dönüştüren veya süzen işlemler. (Lazy çalışırlar, terminal işlemi gelene kadar icra edilmezler).
Terminal İşlemi (Terminal Operation): Akışı sonlandırıp sonucu üreten işlem (Örn: collect(), forEach()).
2. Temel İşlemler: Filter, Map ve Sorted
A. Filtreleme (filter)
Belirli bir koşula uyan elemanları seçmek için kullanılır. İçine bir Predicate (boolean dönen ifade) alır.
Java:
List<String> isimler = Arrays.asList("Ahmet", "Ayşe", "Mehmet", "Ali", "Can");
List<String> aIleBaslayanlar = isimler.stream()
.filter(s -> s.startsWith("A")) // Koşul: A ile başlasın
.collect(Collectors.toList());
// Sonuç: [Ahmet, Ayşe, Ali]
B. Haritalama (map)
Her bir elemanı başka bir forma dönüştürmek için kullanılır. Örneğin, bir nesne listesinden sadece isimleri çekmek veya sayıların karesini almak gibi.
Java:
List<Integer> sayilar = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> kareler = sayilar.stream()
.map(n -> n * n) // Her sayının karesini al
.collect(Collectors.toList());
// Sonuç: [1, 4, 9, 16, 25]
C. Sıralama (sorted)
Elemanları doğal sıralamasına veya sizin belirlediğiniz bir Comparator'a göre dizer.
Java:
List<String> siraliIsimler = isimler.stream()
.sorted() // Alfabetik sırala
.collect(Collectors.toList());
3. Örnek: Hepsini Birleştirelim
Diyelim ki elimizde bir Personel listesi var. Maaşı 20.000 TL'den fazla olanların isimlerini büyük harfle ve alfabetik sırada getirmek istiyoruz:
Java:
List<String> sonuc = personeller.stream()
.filter(p -> p.getMaas() > 20000) // 1. Filtrele
.map(p -> p.getIsim().toUpperCase()) // 2. Dönüştür (Büyük Harf)
.sorted() // 3. Sırala
.limit(5) // 4. İlk 5'i al
.collect(Collectors.toList()); // 5. Listeye dök
4. Ara ve Terminal İşlemler Tablosu
| Ara İşlemler (Lazy) | Terminal İşlemler (Eager) |
|---|---|
| filter() | collect() (Listeye/Set'e çevirir) |
| map() | forEach() (Her eleman için işlem yap) |
| distinct() (Tekrarları sil) | count() (Eleman sayısını dön) |
| limit() / skip() | anyMatch() / allMatch() |
| sorted() | reduce() (Tek bir değere indirge) |
5. Stream Kullanmanın Avantajları
Okunabilirlik: Kod, ne yapıldığını anlatan bir İngilizce metin gibi okunur.
Daha Az Kod: 10 satırlık for ve if blokları 2-3 satıra iner.
Paralel İşleme: Sadece .stream() yerine .parallelStream() yazarak çok çekirdekli işlemcilerin gücünden faydalanabilirsiniz.
Sonuç
Stream API, modern Java geliştiriciliğinin vazgeçilmezidir. Veri yığınlarını yönetmek, raporlar oluşturmak ve karmaşık filtreleme mantıklarını temiz bir şekilde yazmak için en güçlü silahınızdır. Ancak unutmayın; Stream bir veri yapısı değildir, veriyi bir yerden alıp bir yere taşıyan bir akıştır.