Интерфейс Predicate
Интерфейс Predicate из пакета java.util.function
представляет собой функциональный интерфейс, который
принимает один аргумент и возвращает логическое
значение (boolean). Он часто используется
для фильтрации элементов в streams, проверки условий
и создания составных логических выражений.
В параметр мы передаем значение типа T, а на выходе
получаем результат типа boolean.
Синтаксис
@FunctionalInterface
public interface Predicate<T>
{
boolean test(T t);
}
Пример
Давайте создадим простой предикат, который проверяет, является ли число положительным:
import java.util.function.Predicate;
public class Main
{
public static void main(String[] args)
{
Predicate<Integer> isPositive = n -> n > 0;
System.out.println(isPositive.test(5));
System.out.println(isPositive.test(-3));
}
}
Результат выполнения кода:
true
false
Пример
Давайте используем предикат для фильтрации списка чисел:
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
Predicate<Integer> isEven = n -> n % 2 == 0;
List<Integer> res = numbers.stream()
.filter(isEven)
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[2, 4]
Пример
Давайте объединим два предиката с помощью метода and,
чтобы проверить число на положительность и четность:
import java.util.function.Predicate;
public class Main
{
public static void main(String[] args)
{
Predicate<Integer> isPositive = n -> n > 0;
Predicate<Integer> isEven = n -> n % 2 == 0;
Predicate<Integer> isPositiveAndEven = isPositive.and(isEven);
System.out.println(isPositiveAndEven.test(4));
System.out.println(isPositiveAndEven.test(-2));
}
}
Результат выполнения кода:
true
false