Bu yazıda oldukça sık kullanılan Java 8 özelliği olan Stream API’dan bahsedeceğim. Stream API, Collection nesnelerini işlemek için kullanılır.
Stream bir veri yapısı değildir. Bunun yerine Collectionlar, diziler gibi yığın verileri girdi alır. Stream API orijinal veri yapısını değiştirmez, yalnızca ardışık düzen yöntemlerine göre sonuç sağlar.
Her ara işlem tembel olarak yürütülür ve sonuç olarak bir Stream nesnesi döndürür, bu nedenle çeşitli ara işlemler ardışık düzenlenebilir. Terminal işlemleri Stream’in sonunu işaretler ve sonucu döndürür.

Stream İşlemleri
Ara İşlemler
map()
Map methodu, verilen işlevi bu Stream öğelerine uygulama sonuçlarından oluşan bir stream’i döndürmek için kullanılır.
1 2 3 4 5 |
List num = Arrays.asList(2,3,4,5); List sqr = num .stream() .map(x>x*x) .collect(Collectors.toList()); |
filter()
Filter methodu, bağımsız değişken olarak iletilen Predicate’e göre öğeleri seçmek için kullanılır.
1 2 |
List names = Arrays.asList("Reflection","Collection","Stream"); List result =names.stream().filter(s>s.startsWith("S")).collect(Collectors.toList()); |
sorted()
Sorted methodu, stream nesnesini sıralamak için kullanılır.
1 2 |
List names = Arrays.asList("Reflection","Collection","Stream"); List result = names.stream().sorted().collect(Collectors.toList()); |
Terminal İşlemleri
collect()
Collect methodu, Stream’de gerçekleştirilen ara işlemlerin sonucunu döndürmek için kullanılır.
1 2 3 |
List num = Arrays.asList(2,3,4,5,3); Set square = num.stream().map(x->x*x) .collect(Collectors.toSet()); |
forEach()
ForEach methodu, Stream içerisindeki yığınsal veriyi tek tek tüketmek için yapılandırılmıştır.
1 2 3 4 |
List num = Arrays.asList(2,3,4,5); num.stream() .map(x->x*x) .forEach(y->System.out.println(y)); |
reduce()
Reduce methodu, Stream öğelerini tek bir değere azaltmak için kullanılır. Reduce methodu bir BinaryOperator parametresi alır.
1 2 3 4 5 |
List num = Arrays.asList(2,3,4,5); int even = num .stream() .filter(x->x%2==0) .reduce(0,(ans,i)-> ans+i); |