Ana içeriğe geç
Modül 7 · Ders 2 ders 2Kurstaki 14/14~15 min
Modül dersleri (2/2)

Akış API'si

Java'daki Stream API, işlevsel programlamadan yararlanarak nesne koleksiyonlarını bildirimsel bir şekilde işlemenize olanak tanır. Akış veri depolamaz, bunun yerine bir kaynaktan (liste veya dizi gibi) öğeleri bir işlem hattı aracılığıyla taşır.

Stream işlem hattı üç bölümden oluşur:

  1. Bir kaynak (ör. list.stream())
  2. Sıfır veya daha fazla ara işlemler (yeni bir Akış döndüren, örneğin filter, map)
  3. terminal işlemi (nihai bir sonuç veya yan etki üreterek Akışı kapatır, örneğin collect, forEach, reduce)

Ortak Ara İşlemler

Ara işlemler tembeldir: bir terminal işlemi çağrılıncaya kadar yürütülmezler.

  • filter(Predicate): öğeleri bir boole koşuluna göre filtreler.
  • map(Function): her öğeyi bir işlev uygulayarak başka bir nesneye dönüştürür.
  • sorted(): Akışın öğelerini sıralar.
Java
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
                             .filter(name -> name.startsWith("M"))
                             .map(name -> name.toUpperCase())
                             .collect(Collectors.toList()); // "MARCO"

Ortak Terminal İşlemleri

  • forEach(Consumer): Akışın her öğesi için bir eylem gerçekleştirir.
  • collect(Collector): Akış sonuçlarını bir kapsayıcıda toplar (örneğin, Collectors.toList() kullanan bir liste).
  • reduce(identity, BinaryOperator): Akış öğelerini tek bir kümülatif değerde birleştirir.
Java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b); // Sums all numbers: 10

Kendin dene

Egzersiz#java.m7.l2.e1
Denemeler: 0Yükleniyor…

Yalnızca çift sayıları filtrelemek için sayıların akışını kullanarak kodu tamamlayın, bunları çiftler adlı yeni bir Listede toplayın ve System.out.println'yi kullanarak yazdırın.

Düzenleyici yükleniyor…
İpucu göster

`numbers.stream()` çağırarak başlayın, `.filter(n -> n % 2 == 0)` ekleyin ve son olarak `.collect(Collectors.toList())` ile toplayın.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m7.l2.e2
Denemeler: 0Yükleniyor…

Haritayı kullanarak ad listesindeki tüm adları büyük harfe dönüştürmek için akışları kullanın ve bunları bir yöntem referansıyla forEach kullanarak birer birer yazdırın.

Düzenleyici yükleniyor…
İpucu göster

`.map(s -> s.toUpperCase())` komutunu ve ardından `.forEach(System.out::println)` terminal işlemini kullanın.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m7.l2.e3
Denemeler: 0Yükleniyor…

Akış ve azaltma terminal işlemini kullanarak, başlangıç ​​değeri 0 olan sayı listesindeki tüm sayıların toplamını hesaplayarak kodu tamamlayın. Toplamı yazdırın.

Düzenleyici yükleniyor…
İpucu göster

'numbers.stream().reduce(0, (a, b) -> a + b)' komutunu kullanın ve elde edilen değişkeni yazdırın.

3 denemeden sonra çözüm mevcut