Page 35 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 35
Java’da Fonksiyonel Programlama | 35
Bu örnekte :: sembolünün Integer.sum() metodu referansı olarak da kullanılması gösterilmiştir.
Loop kullanırken sürekli değeri güncellenen result kullanarak, stream örneğinde immutable mantığına
da uyum sağlamıştır. Bu örnekte alınan çıktı ikisi için de aynı olacaktı fakat, toplamaya 0’dan değil de
farklı bir sayıdan başlanması istenseydi result değerine başka bir sayı atamanın karşılığı stream için
reduce içindeki 0’ı artırmak olacaktı. Stream’in başlıca işlevlerinden aşağıda kısaca bahsedilmiştir:
4.1. Map
Map operatörü stream içindeki her eleman üzerinde belirtilmiş fonksiyonu çağırarak yeni bir stream
yaratır. Yukarıdaki örnekte 1, 2, 3, 4, 5 elemanlarını bulunduran streamden 2, 4, 6, 8, 10 elemanlarını
bulunduran yeni bir stream yarattı.
4.2. Filter
Filter operatörü stream içindeki verileri belirtilmiş koşula göre test ederek, sadece uyan verilere
sahip yeni bir stream yaratır. Örneğin, aşağıdaki örnekte filter sonucundaki stream sadece çift
sayıları bulunduran {2,4} olacaktır:
List<Integer> integerList = Arrays.asList(1,2,3,4,5);
List<Integer> streamedList = integerList.stream()
.filter(i -> i % 2 -= 0)
.collect(Collectors.toList());
4.3. Collect
Stream verilerini farklı şekillerde gruplayıp belirtilen birimde dönen operatördür. Önceki örnekte
liste olarak dönmesi söylenmiştir.
4.4. ForEach
ForEach bir consumerdır ve streamde bulunan her veri üzerinde forEach içinde belirtilmiş işlevi
çağırır. Örneğin aşağıda listenin her elemanı için, elemanın iki katını yazdıran bir kullanım mevcuttur.
List<Integer> integerList = Arrays.asList(1,2,3);
integerList.forEach(integer -> System.out.println(integer * 2));
Program çıktısı:
false
false
true