Predicate Functional Interface


Predicate কী?

Predicate হলো Java-এর একটি Functional Interface, যা মূলত কোনো কন্ডিশন (true / false) যাচাই করার জন্য ব্যবহৃত হয়।

সহজ কথায়:
Predicate = প্রশ্ন (Yes / No)

উদাহরণ:

  • সংখ্যা জোড় কি না?
  • user active কি না?
  • age 18-এর বেশি কি না?


Predicate Interface-এর গঠন

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

test() মেথড:

  • ইনপুট নেয় T
  • রিটার্ন করে true অথবা false


Predicate কেন দরকার?

ধরা যাক, আমাদের একটি List আছে এবং আমরা শর্ত অনুযায়ী ডাটা ফিল্টার করতে চাই।

- পুরোনো পদ্ধতিতে অনেক if-else
- Predicate ব্যবহার করলে কোড হয় clean & reusable


সাধারণ Predicate উদাহরণ

🔹 সংখ্যা জোড় কিনা

Predicate<Integer> isEven = n -> n % 2 == 0;

System.out.println(isEven.test(10)); // true
System.out.println(isEven.test(7));  // false


Stream-এর সাথে Predicate ব্যবহার

সবচেয়ে বেশি ব্যবহার এখানেই হয়।

List<Integer> numbers = List.of(1,2,3,4,5,6);

numbers.stream()
       .filter(n -> n > 3)
       .forEach(System.out::println);

এখানে filter() এর ভিতরের Lambda আসলে একটি Predicate


Predicate আলাদা করে লিখে ব্যবহার

Predicate<Integer> greaterThanThree = n -> n > 3;

numbers.stream()
       .filter(greaterThanThree)
       .forEach(System.out::println);


Predicate-এর Default Methods

Predicate-এর কিছু শক্তিশালী default method আছে।


and() – একাধিক শর্ত

Predicate<Integer> isEven = n -> n % 2 == 0;
Predicate<Integer> greaterThanTen = n -> n > 10;

Predicate<Integer> evenAndGreaterThanTen =
        isEven.and(greaterThanTen);

System.out.println(evenAndGreaterThanTen.test(12)); // true


or() – যেকোনো একটি শর্ত

Predicate<Integer> lessThanFive = n -> n < 5;
Predicate<Integer> greaterThanTwenty = n -> n > 20;

Predicate<Integer> result =
        lessThanFive.or(greaterThanTwenty);


negate() – শর্ত উল্টানো

Predicate<Integer> isOdd = isEven.negate();


Object-এর উপর Predicate

Person উদাহরণ

class Person {
    String name;
    int age;
}


age >= 18 কি না

Predicate<Person> isAdult =
        p -> p.age >= 18;


ব্যবহার

persons.stream()
       .filter(isAdult)
       .forEach(p -> System.out.println(p.name));


Predicate chaining (বাস্তব উদাহরণ)

Predicate<Person> isAdult = p -> p.age >= 18;
Predicate<Person> nameStartsWithA = p -> p.name.startsWith("A");

Predicate<Person> finalPredicate =
        isAdult.and(nameStartsWithA);


Predicate.not() (Java 11+)

Predicate<String> isEmpty = String::isEmpty;

list.stream()
    .filter(Predicate.not(isEmpty))
    .forEach(System.out::println);


Built-in Predicate Helpers

Predicate<Object> isNull = Objects::isNull;
Predicate<Object> nonNull = Objects::nonNull;


Predicate বনাম Function

PredicateFunction
boolean রিটার্ন করেঅন্য যেকোনো টাইপ
Condition checkTransformation
filter()map()