Page 27 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 27
Java’da Fonksiyonel Programlama | 27
Consumer arayüzüne benzer olarak bir yerine iki argüman alan Bi-Consumer arayüzü de
bulunmaktadır.
public static void main(String[] args) {
Map<String, Integer> harcliklar = Map.of(“mehmet”,100, “ahmet”, 200);
BiConsumer<String, Integer> biConsumer = (kisi, harclik) -> System.out.
println(kisi + “’in harçlığı: “ + harclik);
harcliklar.forEach(biConsumer);
}
Örneğin, bu consumer karakterle birlikte karakterin sayı değerini alarak ikisini birden tüketir ve
aşağıdaki çıktıyı verir:
t: 29
e: 14
s: 28
t: 29
Ön tanımlı olarak ikiden fazla argüman alan tipi bulunmaz. Fakat argümanlardan birisi BiConsumer
olan farklı bir BiConsumer kullanılarak, üç argümanlı veya benzer şekilde daha fazla argüman alan
çeşitleri tanımlanabilir.
Consumerların çalıştıktan sonra verileri tükettiklerinden ve hiçbir değer döndürmediklerinden bahsettik
fakat birden fazla işlem yapmaya ihtiyaç varsa consumerları ardı ardına çalışacak şekilde bağlamamıza imkân
tanıyan andThen kullanılabilir.
Örneğin aşağıdaki kodda her bir liste elemanı için ilk önce elemanın kendisini çıktı veren consumer, ardından
da elemanın bir fazlasının çıktısını veren consumer çalışacak ve sırasıyla 1,2,3,4,5,6 çıktıları alınmış olacaktır.
Consumer<Integer> consumer1 = i -> System.out.println(i);
Consumer<Integer> consumer2 = i -> System.out.println(i+1);
List<Integer> sayiList = Arrays.asList(1, 3, 5);
sayiList.stream().forEach(i -> consumer1.andThen(consumer2).accept(i));
sayiList.stream().forEach(consumer1.andThen(consumer2));
Iki farklı kullanımı gösterilmiş andThen örnekleri aynı şekilde çalışmaktadır ve ikisi de ayrı olarak aşağıdaki
çıktıyı verir:
1
2
3
4
5
6