Page 34 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 34

34 |  Java’da Fonksiyonel Programlama



            Function<Integer, Integer> yediCikar = sayi -> sayi - 7;
            Function<Integer, Integer> ikiyleCarp = sayi -> sayi * 2;
            Function<Integer, Integer> yediCikarVeIkiyleCarp = yediCikar.
            andThen(ikiyleCarp);

            System.out.println(yediCikarVeIkiyleCarp.apply(10));


           Çıktı aşağıdaki gibi olacaktır:


            10

           Function için ek olarak compose metodu da bulunmaktadır. Ve andThen’in tersi sırasıyla çalışır. Yani
           ilk önce compose’a argüman olarak geçilen function, ardından ise compose’un çağrıldığı function
           çalışır. Compose ile aynı çıktıyı almak için aşağıdaki gibi tanımlanması gerekirdi.




            Function<Integer, Integer> yediCikar = sayi -> sayi - 7;
            Function<Integer, Integer> ikiyleCarp = sayi -> sayi * 2;
            Function<Integer, Integer> yediCikarVeIkiyleCarp = ikiyleCarp.
            compose(yediCikar);

            System.out.println(yediCikarVeIkiyleCarp.apply(10));





           4. Stream API


           Stream API, Java 8 ile eklenmiş bir yeniliktir. Stream akıntı anlamına gelir ve çalışma mantığı olarak

           da  bir  akıntı  üzerine  gelen  verileri  sırayla  ya  da  paralel  işleyen  metotlar  olarak  düşünülebilir.
           Stream sayesinde loop kullanan imperative metotlar, fonksiyonel programlamaya uygun şekilde
           değiştirilebilmektedir.



            public class Main {
                public static void main(String args[]) {
                    List<Integer> integerList = Arrays.asList(1,2,3,4,5);
                    int result = 0;
                    for (int i = 0; i < integerList.size(); i-+) {
                        result += integerList.get(i) * 2;
                    }
                    System.out.println(result);


                    result = integerList.stream()
                            .map(i -> i * 2)
                            .reduce(0, Integer-:sum);
                    System.out.println(result);
                }
            }
   29   30   31   32   33   34   35   36   37   38   39