CodeBlanks Logo Icon CodeBlanks

forEach ile lambda

forEach içinde lambda kullanmayı öğrenirsin.

forEach ile lambda

forEach metodu bir koleksiyonun her elemanı için bir action çalıştırır. Parametresi Consumer<T> functional interface'dir; tek accept(T) metodu vardır. Lambda ile names.forEach(s -> System.out.println(s)); yazılır.

forEach for-each döngüsünün işlevsel karşılığıdır. İçeride elemanları değiştiremezsin; yalnızca okuma ya da yan etki (ekrana yazdırma, dosyaya yazma) yapabilirsin. Sıralı koleksiyonlarda ekleme sırasında dolaşır.

forEach vs for-each döngüsü

İki biçim de koleksiyonu dolaşır ama farklıdır. Klasik for-each: for (String s : names) { ... } — döngü içinden break ya da continue ile çıkılabilir. forEach: names.forEach(s -> ...) — lambda içinden break/continue kullanılamaz.

forEach daha kısa ve işlevsel stillere uygundur; ancak erken çıkış gerekiyorsa klasik for-each tercih edilir. Yan etki üretmek (yazdırma, toplama) forEach ile daha derli topludur.

Uygulama forEach ile fiyatları topla

List<Integer> prices = new ArrayList<>(); tanımla; 10, 20, 30 ekle. Toplamı tutmak için int[] total = {0}; kullan (lambda içinde effectively final gerekir). prices.forEach(p -> total[0] += p); ile her fiyatı topla. Döngüden sonra System.out.println(total[0]); ile toplamı yazdır.

Başlangıç kodu

Main.java
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // List<Integer> tanımla, 10,20,30 ekle; toplam tutacak tek elemanlı dizi oluştur, forEach ile topla, yazdır

    }
}

Örnek çözüm

Main.java
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        List<Integer> prices = new ArrayList<>();
        prices.add(10);
        prices.add(20);
        prices.add(30);
        int[] total = {0};
        prices.forEach(p -> total[0] += p);
        System.out.println(total[0]);
    }
}

Beklenen çıktı

60

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 forEach hangi functional interface'i bekler?

  • Consumer Doğru cevap
  • Comparator
  • Supplier
  • Runnable

Açıklama: forEach bir Consumer<T> bekler; tek accept(T) metodu vardır.

2 forEach kavramlarını eşleştir

Kavram Anlamı
forEach(...) Action çalıştırır
Consumer<T> Tek parametre alan arayüz
s -> ... Lambda parametresi
break forEach'te yok

3 forEach çağrısını tamamla

Soru
names.forEach(____ -> System.out.println(s));
Cevap
names.forEach(s -> System.out.println(s));

Açıklama: Tek parametreli lambda parantezsiz yazılabilir.

Orta seviye bölümündeki tüm dersler