Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Предикат: Фільтрація Даних | Основи Та Функціональні Можливості Stream API
Stream API

bookПредикат: Фільтрація Даних

Свайпніть щоб показати меню

Основне призначення 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011121314151617181920212223
package 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

Main.java

copy
1234567891011121314151617181920212223
package 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

Main.java

copy
1234567891011121314151617181920
package 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. Яким буде результат виконання наступного коду?

question mark

Яке основне призначення функціонального інтерфейсу Predicate у Java?

Виберіть правильну відповідь

question mark

Яким буде результат виконання наступного коду?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 1. Розділ 4
some-alt