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

28 |  Java’da Fonksiyonel Programlama



           3.2. Supplier

           Supplier  tedarikçi  anlamına  gelir  ve  bu  arayüzler  mantık  olarak  consumer’ın  tersidir  denebilir.
           Argüman almazlar fakat çıktı üretirler. Bu arayüz içinde tanımlı olarak sadece get metodu bulunur.


            public class Main {
                static Supplier<String> messageSupplier = () -> “Test Mesaji”;

                public static void main(String args[]) {
                    System.out.println(messageSupplier.get());
                }
            }

           Örneğin, bu örnekte çıktımız messageSupplier tarafından dönülen string’in kendisi olacaktır:


            Test Mesaji

           Supplier argüman almadığı için BiSupplier gibi versiyonları vardır, fakat belli tipleri dönen versiyonları
           bulunmaktadır. Örneğin: IntSupplier, LongSupplier, BooleanSupplier, DoubleSupplier…

           IntSupplier için örnek kullanım şu şekilde gösterilebilir:


            public class Main {
                static IntSupplier birdenOnaSayiSupplier =
                        () -> (int) (Math.random() * 10 + 1);

                public static void main(String args[]) {
                    System.out.println(birdenOnaSayiSupplier.getAsInt());
                }
            }


           Bu supplier bize 1-10 arasında rastgele bir sayı değeri dönecektir. Örnekten görülebileceği gibi bu

           arayüzler get metodu yerine getAsX şeklinde metotlar kullanır.


           3.3. Predicate


           Predicate dayanak gibi bir anlama gelir ve bu arayüzler bir argüman alıp üzerinde kontrol mantığı
           çalıştırıp  boolean  değer  dönerler.    Bu  arayüz  içinde  test  metodu  bulunur  ve  argüman  üzerinde
           kontrol mantığını test eder.


            public class Main {
                static Predicate<Integer> isCiftSayi = (i) -> i % 2 -= 0;

                public static void main(String args[]) {
                    System.out.println(isCiftSayi.test(10));
                    System.out.println(isCiftSayi.test(9));
                }
            }
   23   24   25   26   27   28   29   30   31   32   33