Предикат: Фільтрація Даних
Свайпніть щоб показати меню
Основне призначення Predicate — забезпечення зручної фільтрації даних на основі заданої умови. Цей функціональний інтерфейс містить єдиний абстрактний метод:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
Додатково надаються дефолтні методи для комбінування умов, такі як and(), or() та negate(), які будуть розглянуті пізніше.
Практичне застосування
Синтаксис для всіх функціональних інтерфейсів має схожий шаблон і є досить простим:
Predicate<T> predicate = t -> condition;
Тут T позначає тип вхідного аргументу, а condition — це вираз, який повертає або true, або false.
Наприклад, потрібно перевірити, чи є задане число парним. Для цього можна використати Predicate наступним чином:
Main.java
1234567891011121314151617package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: Check if a number is even Predicate<Integer> isEven = number -> number % 2 == 0; int number = 4; if (isEven.test(number)) { System.out.println(number + " is an even number."); } else { System.out.println(number + " is an odd number."); } } }
Цей код використовує метод test() інтерфейсу Predicate, який призначений для оцінювання умов. При виклику test() виконується логіка, визначена у лямбда-виразі number -> number % 2 == 0, що перевіряє, чи число ділиться на 2 без залишку, визначаючи його парність.
Тут Predicate використовується для перевірки, чи є задане число парним, а метод test() застосовує цю умову.
Комбінування умов
Predicate надає можливість комбінувати умови за допомогою методів and(), or() та negate(). Це дозволяє виконувати більш складні перевірки. Розглянемо кілька прикладів:
Умова AND
Припустимо, потрібно перевірити, чи число відповідає двом критеріям: воно повинно бути більше 10 та парним.
Для цього можна використати метод and(), аналогічно до оператора && у Java, щоб переконатися, що обидві умови повертають true.
Main.java
1234567891011121314151617181920212223package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is greater than 10 Predicate<Integer> isGreaterThanTen = number -> number > 10; // Condition 2: The number is even Predicate<Integer> isEven = number -> number % 2 == 0; // Combined condition: The number is greater than 10 and even Predicate<Integer> combinedCondition = isGreaterThanTen.and(isEven); int number = 12; if (combinedCondition.test(number)) { System.out.println(number + " meets both conditions."); } else { System.out.println(number + " does not meet the conditions."); } } }
Метод and() об'єднує дві умови. Число повинно відповідати обом критеріям, щоб результат був true.
Умова OR
Тепер розглянемо ситуацію, коли потрібно перевірити, чи число є або меншим за 5, або більшим за 15.
Можна використати метод or(), аналогічно до оператора || у Java, щоб переконатися, що хоча б одна з умов повертає true.
Main.java
1234567891011121314151617181920212223package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is less than 5 Predicate<Integer> isLessThanFive = number -> number < 5; // Condition 2: The number is greater than 15 Predicate<Integer> isGreaterThanFifteen = number -> number > 15; // Combined condition: The number is less than 5 or greater than 15 Predicate<Integer> combinedCondition = isLessThanFive.or(isGreaterThanFifteen); int number = 3; if (combinedCondition.test(number)) { System.out.println(number + " meets at least one of the conditions."); } else { System.out.println(number + " does not meet any of the conditions."); } } }
Метод or() перевіряє, чи число задовольняє хоча б одну з вказаних умов. Це корисно, коли достатньо виконання лише одного критерію.
NEGATE Умова
Припустимо, потрібно перевірити, чи рядок є непорожнім.
Можна використати метод negate(), аналогічно до оператора ! у Java, щоб інвертувати результат умови.
Main.java
1234567891011121314151617181920package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: The string is empty Predicate<String> isEmpty = str -> str == null || str.isEmpty(); // Condition: The string is not empty Predicate<String> isNotEmpty = isEmpty.negate(); String text = "Hello"; if (isNotEmpty.test(text)) { System.out.println("The string contains text: " + text); } else { System.out.println("The string is empty."); } } }
Метод negate() інвертує умову. Якщо початкова умова повертає true, інвертована версія поверне false, і навпаки.
1. Яке основне призначення функціонального інтерфейсу Predicate у Java?
2. Яким буде результат виконання наступного коду?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат