Java’da Predicate Functional Interface

Predicate functional interface, java 8'de halihazırda mevcut olan bir yapıdır. Eğer functional interface nedir? Nasıl tanımlanır? Gibi soruların cevaplarını bilmiyorsanız, aşağıda bağlantı adresi verilmiş yazımı okumanızı tavsiye ederim.

Java’da Functional Interface ve Lambda Expression

Predicate generic type alabildiği gibi primitive type olan versiyonları da mevcuttur.

Predicate<T>, IntPredicate, DoublePredicate gibi.

İlgili functional interface’lerin içindeki metotları inceleyelim;

Predicate<T> → boolean test(T t);
IntPredicate → boolean test(int value);
DoublePredicate → boolean test(double value);

Basit bir örnek ile başlayalım;

Predicate interface’inin generic olan versiyonu kullanılmış. Tip Integer olarak verilmiş, eğer ilgili sayı 10 dan büyük ise true değilse false değeri dönecektir. Sonuç aşağıdaki gibidir;

5 > 10 ==> false
15 > 10 ==> true

Bu sefer aynı örneği IntPredicate ile yapalım. Farkı ise tanımlanırken tip istememesi ve parametre olarak int (primitive type) almasıdır. Fakat sonuç bir önceki örnek ile aynıdır.

5 > 10 ==> false
15 > 10 ==> true

Bir çok metot parametre olarak predicate’i almaktadır. Filter metodu buna örnektir.

  • 11 numaralı satıra bakıldığında, filter metodunun generic type bir predicate aldığını görüyoruz.
  • 13 numaralı satırdaki örnekte ise, elimizde bir liste mevcut filter metoduna bir predicate parametre (x -> x > 10) geçiyoruz. Bu filtreleme sonrası listedeki değerleri yazdırmak için forEach metodunu kullanıyoruz.
  • 18 satırda, predicate parametresini parantez içine yazmıyoruz. Daha sonra metoda parametre (greaterThan10) olarak gönderiyoruz.
  • Son örnekte ise String’ler üzerinde bir kontrol yapıyoruz.
    (x -> x.startWith(“M”)) bu kontrole göre listede kalanları yazdırıyoruz.

Örneğin tamamına github adresimden ulaşabilirsiniz.

Kod mu? Severim