Stream of Primitives
Stream<T> Generic Type olduğundan dolayı, Primitive değişkenlerin varolduğu bir Stream’i diğerleri gibi oluşturamayız, primitive değişkenlerin yer aldığı bir Stream oluşturmak istiyorsak bunun için özel olarak yazılmış IntStream, DoubleStream ve LongStream interface’lerini kullanabiliriz.
.of Metotu kullanarak Stream Oluşturma
IntStream.of(1,2,3,4); LongStream.of(1,2,3,4,5L); DoubleStream.of(1.2,3.4,5,6.4);;
.range .rangeClosed() Metotu Kullanarak Stream Oluşturma
Range içerisinde belirtilen sayıdan artan şekilde son sayıya kadar oluşan artimatik dizinin Stream’i yaratılmaktadır.
RangeClosed kullanıldığında son belirtilen sayı’da dahil edilmektedir. Range’de ise son belirtilen sayıya kadar olan sayı aralığı kullanılır.
Range ve RangeClosed Metotu DoubleStram için kullanılamaz.
RangeClosed kullanıldığında son belirtilen sayı’da dahil edilmektedir. Range’de ise son belirtilen sayıya kadar olan sayı aralığı kullanılır.
Range ve RangeClosed Metotu DoubleStram için kullanılamaz.
IntStream.range(1,5); LongStream.range(1,5);
Iterate Metotu Kullanarak Stream Oluşturma
Iterate metotu ilk paremetere olarak başlangıç değeri ve ikinci paremetre olarak bir sonraki değeri üretmek için gerekli işlemi alarak sonsuza giden bir seri üretmektedir. Bu yüzden limit metotu ile bu Stream’i limitlemek gerekebilir.
IntStream.iterate(10,x->x+2).limit(10); LongStream.iterate(1L,x->x+5).limit(100); DoubleStream.iterate(0,x->x+0.1).limit(100);
Generate Kullanarak Stream Oluşturma
Generate metotu iterate metotuna benzer fakat yeni değer üretirken bir önceki değeri kullanmaz. Rastgele değer üretimi buna örnek olabilir.
Random rnd = new Random(); IntStream.generate(()->rnd.nextInt()).limit(10); LongStream.generate(()->rnd.nextLong()).limit(100); DoubleStream.generate(()->rnd.nextDouble()).limit(100);
Rastgele sayı içeren bir Stream oluştururken direk Random classı metotları kullanılabilir. IntStream, LongStream ve DoubleStream oluşturabilir.
Random rnd = new Random(); rnd.ints(); // IntStream rnd.longs(); // LongStream rnd.doubles(); // DoubleStream
Kaynak:
- https://www.baeldung.com/java-8-streams
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html
- https://www.deadcoderising.com/2015-05-19-java-8-replace-traditional-for-loops-with-intstreams/