Page 38 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 38
38 | Java’da Fonksiyonel Programlama
public class Main {
public static void main(String args[]) {
List<List<Integer-> integerList = Arrays.asList(Arrays.asList(1),
Arrays.asList(2), Arrays.asList(3));
List<Integer> streamedList = integerList.stream()
.flatMap(list -> list.stream())
.toList()
System.out.println(streamedList);
}
}
Örneğin, burada liste içindeki liste elemanlarının stream’i kolaylıkla tek bir listeye toplanabilmiştir.
4.11. Parallel
Normalde stream tek sıra halinde çalışır. Stream paralel yapıldığında ise mevcut stream paralel olarak
aynı anda çalışacak küçük streamlere bölünür. Paralellik dolayısıyla verileri işleme sırası karışabilir. Bu
sebeple paralel stream kullanılacağı zaman işlem sırasının değişkenliğinin sorun yaratmayacağından
emin olunması gerekir.
Aşağıdaki örnekte aynı liste üzerinde önce stream oluşturulup sonradan paralele çevirme ve en
baştan paralel stream oluşturma şeklinde iki kullanım görülebilir. Burada sadece, her bir stream
için konsola 1, 2, 3, 4 ve 5’in basılacağından emin olunabilir. Hangi sırayla basılacağı değişkenlik
gösterecektir. Iki stream’in sırası bile birbirinden farklı olabilir. Örneğin birisi 3, 5, 4, 2, 1 sırasıyla çıktı
verirken diğeri 3, 2, 4, 1, 5 şeklinde verebilir.
List<Integer> sayiList = Arrays.asList(1, 2, 3, 4, 5);
sayiList.parallelStream().forEach(i -> System.out.println(i));
sayiList.stream().parallel().forEach(i -> System.out.println(i));