forEach ile lambda
- Java kursu
- Orta seviye
- Ders 103/116
- 5 dk
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
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
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
names.forEach(____ -> System.out.println(s));
names.forEach(s -> System.out.println(s));
Açıklama: Tek parametreli lambda parantezsiz yazılabilir.