Page 34 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 34
34 | Java’da Fonksiyonel Programlama
Function<Integer, Integer> yediCikar = sayi -> sayi - 7;
Function<Integer, Integer> ikiyleCarp = sayi -> sayi * 2;
Function<Integer, Integer> yediCikarVeIkiyleCarp = yediCikar.
andThen(ikiyleCarp);
System.out.println(yediCikarVeIkiyleCarp.apply(10));
Çıktı aşağıdaki gibi olacaktır:
10
Function için ek olarak compose metodu da bulunmaktadır. Ve andThen’in tersi sırasıyla çalışır. Yani
ilk önce compose’a argüman olarak geçilen function, ardından ise compose’un çağrıldığı function
çalışır. Compose ile aynı çıktıyı almak için aşağıdaki gibi tanımlanması gerekirdi.
Function<Integer, Integer> yediCikar = sayi -> sayi - 7;
Function<Integer, Integer> ikiyleCarp = sayi -> sayi * 2;
Function<Integer, Integer> yediCikarVeIkiyleCarp = ikiyleCarp.
compose(yediCikar);
System.out.println(yediCikarVeIkiyleCarp.apply(10));
4. Stream API
Stream API, Java 8 ile eklenmiş bir yeniliktir. Stream akıntı anlamına gelir ve çalışma mantığı olarak
da bir akıntı üzerine gelen verileri sırayla ya da paralel işleyen metotlar olarak düşünülebilir.
Stream sayesinde loop kullanan imperative metotlar, fonksiyonel programlamaya uygun şekilde
değiştirilebilmektedir.
public class Main {
public static void main(String args[]) {
List<Integer> integerList = Arrays.asList(1,2,3,4,5);
int result = 0;
for (int i = 0; i < integerList.size(); i-+) {
result += integerList.get(i) * 2;
}
System.out.println(result);
result = integerList.stream()
.map(i -> i * 2)
.reduce(0, Integer-:sum);
System.out.println(result);
}
}