Java 8 | Predicate

Hasan Kadir Demircan
2 min readSep 10, 2020

--

Predicate

Predicate hakkında bilmemiz gerekenler;

İlk önce functional interface’i anlamamız gerekmektedir.

  • Java8 ile hayatımıza giren functional interface’lerden bir tanesidir.
  • Contidition’ları kontrol edip bir boolean değer döndürür.
  • java.util.function paketi içerisinde bulunmaktadır.(#boolean test(T t))
  • Stream’de bulunan filter methodu predicate parametresi almaktadır ve filtreleme yapabilmekteyiz.

Örnek kodlar ile inceleyecek olursak;

Yukarıdaki örnekte,

  • 3 tane farklı predicate tanımladık.
  • Stream’de bulunan filter özelliği ile predicate1 ‘e göre filtreledik.

Başka bir örnek;

  • Elimizde bulunan List’i Stream yapıyoruz.
  • 8. satırda predicate oluşturarak length 4 olanları seçmesi için kural belirtiyoruz.
  • 9. satırda stream’e filter uygulayarak oluşturduğumuz predicate’i veriyoruz ve ekrana yazdırıyoruz.
  • Eğer stream’e filter uyguladıktan sonra tekrar List şeklinde almak istiyorsak 12. satırda bulunduğu gibi .collect(Collectors.toList()) yapabiliriz.

Başka bir örnek;

  • 5. satırda null check bir predicate tanımladık
  • 6. satırda String değerin uzunluğu 2 den fazla kontrolü yapan bir predicate tanımladık.
  • 9. satırda bu iki predicate’i birleştirdik.
  • Predicate eğer Stream ile filter uygulamazsak true/false döneceğini söylemiştik.

Başka bir örnek;

  • 4. satırda bir ArrayList oluşturduk ve içerisine bazı değerler ekledik.
  • 14. satırda Collection içerisinde bulunan removeIf methodunu kullanarak içerisine bir predicate tanımladık ve ‘h’ karakteri ile başlayanları seçtirdik.
  • Eğer istenilirse removeIf() den önce ayrı bir predicate tanımlayıp sadece predicate değişkenini verebilirdik.
Predicate<String> predicate1 = element -> element.startsWith("h");
stringTempList.removeIf(predicate1);

Başka bir örnek;

  • 4. satırda sonucu boolean olacak işlemlerde String::isEmpty şeklinde daha basit ve kısa kullanım örneği veriyoruz.
  • 7. satırda geri dönüşü int olan bir işleme uygulamak istediğimizde compile error alacağız, çünkü bu kullanım sadece boolean değerlerde geçerlidir.
  • 10. satırda 4. satırdan biraz daha uzun olan empty kontrolü yapan bir predicate tanımlıyoruz.
  • 12. satırda String::startsWith kullanmak istediğimizde hata almaktayız çünkü bu kullanım parametre alan methodlar için uygun değildir.(public boolean startsWith(String prefix))
  • 16. satırda 4. ve 10. satırda yaptığımız empty kontrolünün daha uzun halini görüyoruz.

Github: Predicate

--

--

Hasan Kadir Demircan
Hasan Kadir Demircan

No responses yet