CodeBlanks Logo Icon CodeBlanks

Stream katmanı

Stream ileri ve Optional ile veri akışı kurarsın.

Stream ile filtreleme

Bu derste stream() ile filtreleme yapacaksın. .filter(t -> t.amount > 100) koşulu sağlayan kayıtları seçer; .toList() sonucu bir listeye toplar.

var filtered = ledger.stream()
    .filter(t -> t.amount > 100)
    .toList();

filter bir Predicate alır; her öğeye uygulanır ve true döndürenler kalır. Bu, for-each ile manuel eleme yapmaktan daha kısadır. Sonuç yine bir listedir; boyutunu filtered.size() ile alırsın.

groupingBy ile gruplama

Collectors.groupingBy bir özelliğe göre öğeleri gruplar ve sonucu bir Map olarak döndürür. Her kategori bir anahtar olur; değer o kategorideki kayıtların listesidir.

var grouped = ledger.stream()
    .collect(Collectors.groupingBy(t -> t.category));

Örneğin market ve fuel farklı anahtarlar olduğundan grouped.size() kategori sayısını verir. collect terminal bir işlemdir; stream'i tüketir ve bir sonuç üretir.

Uygulama Stream ile filtrele ve grupla

Önceki dersin ledger listesini kullan. ledger.stream().filter(t -> t.amount > 100).toList() ile filtrelenmis listeyi oluştur ve filtered.size()'i yazdır. Ayrica ledger.stream().collect(Collectors.groupingBy(t -> t.category)) ile bir grouped Map oluştur ve grouped.size()'i yazdır. java.util.stream.Collectors nitelikli adını kullanabilirsin.

Başlangıç kodu

Main.java
import java.util.ArrayList;

class Transaction {
    String category;
    int amount;
    Transaction(String category, int amount) {
        this.category = category;
        this.amount = amount;
        // Stream ile 100 ustu kayitlari filtrele ve kategoriye gore grupla
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Transaction> ledger = new ArrayList<>();
        ledger.add(new Transaction("market", 120));
        ledger.add(new Transaction("fuel", 80));
        for (Transaction t : ledger) {
            System.out.println(t.category + " " + t.amount);
        }
        // Stream ile 100 ustu kayitlari filtrele ve kategoriye gore grupla
    }
}

Örnek çözüm

Main.java
import java.util.ArrayList;

class Transaction {
    String category;
    int amount;
    Transaction(String category, int amount) {
        this.category = category;
        this.amount = amount;
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Transaction> ledger = new ArrayList<>();
        ledger.add(new Transaction("market", 120));
        ledger.add(new Transaction("fuel", 80));
        var filtered = ledger.stream()
            .filter(t -> t.amount > 100)
            .toList();
        var grouped = ledger.stream()
            .collect(java.util.stream.Collectors.groupingBy(t -> t.category));
        System.out.println(filtered.size());
        System.out.println(grouped.size());
    }
}

Beklenen çıktı

1
2

Soru ve cevaplar

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

1 filter çağrısını tamamla

Soru
var filtered = ledger.stream()
    .____(t -> t.amount > 100)
    .toList();
Cevap
var filtered = ledger.stream()
    .filter(t -> t.amount > 100)
    .toList();

Açıklama: filter bir Predicate alır ve eşleşenleri seçer.

2 groupingBy(t -> t.category) ne döndürür?

  • Bir liste
  • Kategoriye göre Map Doğru cevap
  • Bir sayı
  • Bir filter

Açıklama: groupingBy bir Map döndürür; anahtar kategori, değer liste.

3 Stream kavramlarını eşleştir

Kavram Anlamı
stream() Akış başlatır
filter Koşula göre seçer
toList Listeye toplar
groupingBy Map oluşturur

İleri seviye bölümündeki tüm dersler