CodeBlanks Logo Icon CodeBlanks

filter

filter ile eleman süzmeyi öğrenirsin.

filter ile eleme

filter(Predicate) bir ara işlemdir; akıştaki elemanlardan koşulu sağlayanları yeni bir akışta tutar. Predicate<T> tek test(T) metodu olan functional interface'dir; boolean döner.

Örnek: names.stream().filter(s -> s.length() > 3) üçten uzun isimleri akışta tutar. filter tembel olduğu için tek başına çalışmaz; bir terminal işlemi eklenmelidir. Birden fazla filter zincirlemek de mümkündür.

Predicate nedir?

Predicate<T> bir koşul fonksiyonudur; test(T) metodu boolean döner. s -> s.isEmpty() bir Predicate lambda'sıdır. filter, her eleman için Predicate'i çağırır; true dönerse elemanı tutar.

Birden fazla koşulu && ile birleştirebilirsin: s -> s.length() > 3 && s.startsWith("A"). Veya iki ayrı filter zincirleyebilirsin; sonuç aynıdır. Kompozit koşullarda Predicate.and gibi birleştiriciler de vardır.

Uygulama Uzun isimleri say

List<String> names = new ArrayList<>(); tanımla; "Ayşe", "Alexander", "Alex" ekle. long count = names.stream().filter(s -> s.length() > 5).count(); ile beşten uzun isimleri say. System.out.println(count); ile 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<String> tanımla, 3 isim ekle, filter ile 5'ten uzunları say, 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<String> names = new ArrayList<>();
        names.add("Ayşe");
        names.add("Alexander");
        names.add("Alex");
        long count = names.stream().filter(s -> s.length() > 5).count();
        System.out.println(count);
    }
}

Beklenen çıktı

1

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
names.stream().____(s -> s.length() > 3)
Cevap
names.stream().filter(s -> s.length() > 3)

Açıklama: filter metodu Predicate bekler.

2 filter hangi functional interface'i bekler?

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

Açıklama: filter bir Predicate<T> bekler; test(T) metodu boolean döner.

3 filter kavramlarını eşleştir

Kavram Anlamı
filter(...) Koşulu sağlayanları tutar
Predicate<T> Koşul fonksiyonu
test(T) Boolean döndürür
s -> s.length() > 3 Lambda Predicate

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