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