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

Java’da Fonksiyonel Programlama | 27



           Consumer  arayüzüne  benzer  olarak  bir  yerine  iki  argüman  alan  Bi-Consumer  arayüzü  de
           bulunmaktadır.


            public static void main(String[] args) {
                Map<String, Integer> harcliklar = Map.of(“mehmet”,100, “ahmet”, 200);
                BiConsumer<String, Integer> biConsumer = (kisi, harclik) -> System.out.
            println(kisi + “’in harçlığı: “ + harclik);
                harcliklar.forEach(biConsumer);
            }

           Örneğin,  bu  consumer  karakterle  birlikte  karakterin  sayı  değerini  alarak  ikisini  birden  tüketir  ve

           aşağıdaki çıktıyı verir:


            t: 29
            e: 14
            s: 28
            t: 29

           Ön tanımlı olarak ikiden fazla argüman alan tipi bulunmaz. Fakat argümanlardan birisi BiConsumer
           olan farklı bir BiConsumer kullanılarak, üç argümanlı veya benzer şekilde daha fazla argüman alan
           çeşitleri tanımlanabilir.



           Consumerların  çalıştıktan  sonra  verileri  tükettiklerinden  ve  hiçbir  değer  döndürmediklerinden  bahsettik
           fakat birden fazla işlem yapmaya ihtiyaç varsa consumerları ardı ardına çalışacak şekilde bağlamamıza imkân
           tanıyan andThen kullanılabilir.

           Örneğin aşağıdaki kodda her bir liste elemanı için ilk önce elemanın kendisini çıktı veren consumer, ardından

           da elemanın bir fazlasının çıktısını veren consumer çalışacak ve sırasıyla 1,2,3,4,5,6 çıktıları alınmış olacaktır.


            Consumer<Integer> consumer1 = i -> System.out.println(i);
            Consumer<Integer> consumer2 = i -> System.out.println(i+1);
            List<Integer> sayiList = Arrays.asList(1, 3, 5);

            sayiList.stream().forEach(i -> consumer1.andThen(consumer2).accept(i));
            sayiList.stream().forEach(consumer1.andThen(consumer2));


           Iki farklı kullanımı gösterilmiş andThen örnekleri aynı şekilde çalışmaktadır ve ikisi de ayrı olarak aşağıdaki
           çıktıyı verir:


            1
            2

            3
            4
            5
            6
   22   23   24   25   26   27   28   29   30   31   32