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

36 |  Java’da Fonksiyonel Programlama



           4.5. AllMatch


           AllMatch operatörü stream içindeki verileri belirtilmiş koşula göre test eder ve eğer tüm veriler
           koşulu sağlıyorsa true, herhangi biri bile sağlamıyorsa false döner.

           Örneğin  aşağıda  yer  alan  sayiList  listesinde  tek  sayılar  da  bulunduğu  için  allMatch(çift  sayı  mı)
           kontrolü false dönecektir. Fakat ciftSayiList içindeki tüm sayılar çift olduğu için true dönecektir.



            List<Integer> sayiList = Arrays.asList(1,2,3);
            List<Integer> ciftSayiList = Arrays.asList(2,4,6);

            System.out.println(sayiList.stream().allMatch(sayi -> sayi % 2 -= 0));
            System.out.println(ciftSayiList.stream().allMatch(sayi -> sayi % 2 -= 0));



           4.6. AnyMatch


           AnyMatch operatörü stream içindeki verileri belirtilmiş koşula göre test eder ve eğer hiçbir veri
           koşulu sağlamıyorsa false, herhangi biri bile sağlıyorsa true döner.

           4.5’teki örneğin bir benzerini burada da kullanılabilir. Fakat burada elemanlardan herhangi birinin
           koşulu sağlaması yeterli olduğu için sayiList ve ciftSayiList true, içinde hiç çift sayı bulundurmayan
           tekSayiList false dönecektir.



            List<Integer> sayiList = Arrays.asList(1,2,3);
            List<Integer> ciftSayiList = Arrays.asList(2,4,6);
            List<Integer> tekSayiList = Arrays.asList(1, 3, 5);


            System.out.println(sayiList.stream().anyMatch(sayi -> sayi % 2 -= 0));
            System.out.println(ciftSayiList.stream().anyMatch(sayi -> sayi % 2 -= 0));
            System.out.println(tekSayiList.stream().anyMatch(sayi -> sayi % 2 -= 0));


           4.7. Distinct


           Stream içindeki verileri birbiriyle karşılaştırarak, eşitlik koşulunu sağlayan çoklu verileri teke indirger.

           Örneğin aşağıdaki sayiList içinde tekrar eden elemanlar bulunmaktadır. Eğer distinct kullanmadan forEach
           kullanıp  printleseydi  her  eleman  için  bir  tane  olmak  üzere  yedi  adet  çıktı  olacaktı.  Fakat  önce  distinct
           elemanları alınıp kullanıldığı zaman tekrar eden elemanları çıkartıp, geriye kalan (1, 2, 3, 4) listesi üzerinde
           işlem yapacak ve dört adet çıktı verecektir.



            List<Integer> sayiList = Arrays.asList(1,2,3,3,1,3,4);




            sayiList.stream().distinct().forEach(sayi -> System.out.println(sayi));
   31   32   33   34   35   36   37   38   39   40   41