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));