Java 8 Stream API Stream Nasıl Yaratılır?

Posted by dogukanhan on May 11, 2019 · 2 mins read

Stream bir interface’dir. Bu yüzden doğrudan nesnesi oluşturulamaz. Stream java.util.stream paketi altında yer almaktadır.

Stream Oluşturma Yöntemleri

Empty Stream

Stream<Integer> emptyStream = Stream.empty();

Source’u empty olan bir stream döndürür. Stream return eden bir fonkisyon yazıyorsak null return etmek yerine empty Stream döndürebiliriz.

Collection Üzerinden Stream Oluşturma

List<String>liste = new ArrayList<>();
                    liste.stream();
Stack stack = new Stack();
                     stack.stream();
Queue<String> queue = new LinkedList<>();
                      queue.stream();

Collection interface’inde tanımlı olan stream() metodu bütün implementasyonlarında mevcuttur bu yüzden stream() metodunu çağırmamız yeterlidir.

Array Üzerinden Stream Oluşturma

String[] arr = new String[]{"a", "b", "c"};
Stream<String> streamOfArrayFull = Arrays.stream(arr);
Stream<String> streamOfArray = Stream.of("a", "b", "c");

Array üzerinden Stream oluşturmak için Arrays.stream() methodu kullanılabilir, gönderilen argümanları içeren bir stream nesnesi oluşturmaktadır. Stream.of ise bu işleme daha kısa bir çözüm sunar.

Stream Builder Kullanarak Stream Oluşturma

Stream<String> streamBuilder =
  Stream.<String>builder().add("a").add("b").add("c").build();

Bu yapı yine Array üzerinden stream oluşturma yöntemine benzer, Builder pattern kullanarak Stream oluşturulmasını sağlamaktadır.

Stream Generate Kullanarak Stream Oluşturma

Stream<String> streamGenerated =
               Stream.generate(() -> "element").limit(10);

final Random random = new Random();
Stream<Integer> randomNumbers = 
                Stream.generate(()->random.nextInt()).limit(10);

Stream içerisinde yer alan generate metodu ile, elemanların belirli bir kurala göre oluşmasını belirterek Stream oluşturabiliriz burada limitlemezsek sonsuz’a kadar oluşturmaya devam edecektir. Verilen ilk örnekte içerisinde element yazan 10 tane string yer alacaktır, ikincisinde ise 10 tane rastgele sayı üretecektir.

Stream Iterate Kullanarak Stream Oluşturma

Stream<Integer> streamIterated = Stream.iterate(40, n -> n + 2).limit(20);

Stream Iterate metotu Generate metotu ile benzerlik gösterir farkı ise ilk değeri parametre olarak alması, diğer değerlerin hesaplanmasında bir algoritmaya ihtiyaç duymasıdır.

Kaynak: