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
   30   31   32   33   34   35   36   37   38   39   40