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

Java’da Fonksiyonel Programlama | 31




            public static void main(String args[]) {
                BiFunction<String, Integer, String> charConsumerFunction = (str, i) -> str +
            “’in harçlığı: “ + i;

                Map<String, Integer> harcliklar = Map.of(“mehmet”,100, “ahmet”, 200);
                harcliklar.entrySet().forEach(
                        mapEntry -> System.out.println(
                                charConsumerFunction.apply(mapEntry.getKey(), mapEntry.
            getValue())));
            }

           Bu durumda, kod aynı çıktıyı verecektir:

            t: 29
            e: 14
            s: 28
            t: 29
           Bu  arayüzün  de  IntFunction,  LongFunction  gibi  tipe  özel  çeşitleri  bulunmaktadır.  Predicate  için

           verilen isCiftSayi örneği argüman olarak Integer kullanılacağından, IntFunction olarak ve boolean
           değer dönecek şekilde aşağıdaki gibi tanımlanabilir:

            public class Main {
                static IntFunction<Boolean> isCiftSayi = i -> i % 2 -= 0;


                public static void main(String args[]) {
                    System.out.println(isCiftSayi.apply(10));
                    System.out.println(isCiftSayi.apply(9));
                }
            }

            Bu durumda da aşağıdaki çıktıyı verecektir:


            true
            false


           Fonksiyonlar için ek olarak UnaryOperator ve BinaryOperator adlı iki arayüz bulunmaktadır. Bunlardan

           UnaryOperator, Function arayüzünden; BinaryOperator ise BiFunction arayüzünden extend eder.
           Farkları girdi ve çıktı tiplerinin aynı olmasıdır. Örneğin, iki sayının birbirine bölümünden kalan sayıyı
           bulmak için bir BinaryOperator şu şekilde tanımlanabilir:


            public class Main {
                static BinaryOperator<Integer> bolumdenKalan = (x, y) -> x % y;

                public static void main(String args[]) {
                    System.out.println(bolumdenKalan.apply(10, 3));
                }
            }
   26   27   28   29   30   31   32   33   34   35   36