filter
- Java kursu
- Orta seviye
- Ders 107/116
- 5 dk
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
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
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
names.stream().____(s -> s.length() > 3)
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 |