CodeBlanks Logo Icon CodeBlanks

Stream katmanı

Stream ileri ve Optional ile veri işleme yazarsın.

Stream ile filtreleme

Bu derste stream() ile önem seviyesi yüksek olayları filtreleyeceksin. .filter(e -> e.severity > 2) koşulu sağlayan olayları seçer; .count() sonuç sayısını verir.

long count = log.stream()
    .filter(e -> e.severity > 2)
    .count();

count terminal bir işlemdir; stream'i tüketir ve bir long döndürür. Bu, for-each ile elle saymaktan daha kısadır. Filtrelenen olay sayısı böylece tek satırda elde edilir.

groupingBy ile gruplama

Collectors.groupingBy bir özelliğe göre olayları gruplar ve sonucu bir Map olarak döndürür. Her tip bir anahtar olur; değer o tipteki olayların listesidir.

var grouped = log.stream()
    .collect(Collectors.groupingBy(e -> e.type));

Örneğin info, error ve warn farklı anahtarlar olduğundan grouped.size() tip sayısını verir. collect terminal bir işlemdir.

Uygulama Stream ile filtrele ve grupla

Önceki dersin log listesine üçüncü olayı ekle (warn 3). log.stream().filter(e -> e.severity > 2).count() ile filtrelenen sayıyı bul ve yazdır. Ayrıca log.stream().collect(Collectors.groupingBy(e -> e.type)) ile bir grouped Map oluştur ve grouped.size()'i yazdır.

Başlangıç kodu

Main.java
import java.util.ArrayList;
import java.util.stream.Collectors;

class Event {
    String type;
    int severity;
    Event(String type, int severity) {
        this.type = type;
        this.severity = severity;
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Event> log = new ArrayList<>();
        log.add(new Event("info", 1));
        log.add(new Event("error", 5));
        // Ucuncu olayi ekle (warn 3)
        // Stream ile severity > 2 olanlari filtrele ve say
        // groupingBy ile type'a gore grupla
    }
}

Örnek çözüm

Main.java
import java.util.ArrayList;
import java.util.stream.Collectors;

class Event {
    String type;
    int severity;
    Event(String type, int severity) {
        this.type = type;
        this.severity = severity;
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Event> log = new ArrayList<>();
        log.add(new Event("info", 1));
        log.add(new Event("error", 5));
        log.add(new Event("warn", 3));
        long count = log.stream().filter(e -> e.severity > 2).count();
        var grouped = log.stream().collect(Collectors.groupingBy(e -> e.type));
        System.out.println(count);
        System.out.println(grouped.size());
    }
}

Beklenen çıktı

2
3

Soru ve cevaplar

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

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

Soru
long count = log.stream()
    .filter(e -> e.severity > 2)
    .____();
Cevap
long count = log.stream()
    .filter(e -> e.severity > 2)
    .count();

Açıklama: count() stream'deki öğelerin sayısını döndürür.

2 filter(e -> e.severity > 2).count() ne döndürür?

  • Bir liste
  • Bir Map
  • Bir long sayı Doğru cevap
  • Bir String

Açıklama: count() bir long döndürür.

3 Stream kavramlarını eşleştir

Kavram Anlamı
stream() Akış başlatır
filter Koşula göre seçer
count Sayıyı döndürür
groupingBy Map oluşturur

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