Java 8 Stream API
Günümüzde büyük verinin işlenmesi açısından, işlerin küçük parçalara ayrılıp paralel işlenmesi önem kazanmıştır. Bu işlemi dağıtık bir şekilde yapan frameworkler yazılmakta ve kullanılmaktadır. Javanın, 8 versiyonu da büyük veri işleme yaklaşımlarını ve sektörün yeni gereksinimi olan büyük işlerin küçük parçalar halinde eş zamanlı işlenmesini karşılamaya çalışmasının bir ürünüdür. Stream API de bu cevaplardan birini oluşturur.
Stream, javanın bir kaynak içerisindeki elemanları paralel veya sıralı işlenmesini kolaylaştıran, geliştiriciyi elemanları işlerken oluşturacağı bir çok koşul ve döngü ifadelerinden kurtaran güzel ve kullanışlı bir yapıdır. Stream oluşturulup işlendikten sonra tekrardan işlenemez. Yeniden stream’in oluşturulması gerekir.
Stream oluşturmanın bir kaç yöntemi vardır.
1* Koleksiyonlardan:
Java 8 ile, interface’ler default metota sahip olabilmektedir. Collection interface’i de stream oluşturan metot aracılığı ile, List vb koleksiyonlardan stream oluşturabiliriz.
1 2 3 4 5 6 |
List<Integer> numbers = Arrays.asList(1,4,2,10,8); Stream<Integer> numberStream = numbers.stream(); |
2* IntStream, DoubleStream, LongStream interfaceleri ile:
1 2 3 4 5 6 |
IntStream.range(0, 10).forEach(System.out::println); IntStream.rangeClosed(0, 10).forEach(System.out::println); |
3* Stream Interfacei ile:
1 2 3 4 5 |
Stream.of("Stream","Olustu").forEach(System.out::println); |
Stream üzerinde yaptığımız işlemler intermediate ve terminal olmak üzere ikiye ayrılır. Her iki işlem arasındaki temel farklar:
1* Intermediate işlemler lazy’dir. Terminal işlemi çağrılana kadar, çalışmazlar. Terminal işlemler çağrıldığı anda çalışırlar.
2*Intermediate işlemler ile zincir halinde metotlar ile stream’i işleyebiliriz. Buna pipeline denir. Terminal işlemler ile bu yapılmaz.
3* Intermediate işlemler geriye başka bir stream döner. Terminal işlemler dönmez.
İnşallah faydalı bir yazı olmuştur.
İyi Çalışmalar