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

Predicate Function
boolean রিটার্ন করে অন্য যেকোনো টাইপ
Condition check Transformation
filter() map()
Share