РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
510 of 1163 menu

Класс Predicate

Класс Predicate представляет собой функциональный интерфейс из пакета java.util.function, который принимает один аргумент типа T и возвращает значение типа boolean. Данный интерфейс широко используется в Stream API для фильтрации элементов, а также в методах filter, anyMatch, allMatch, noneMatch, takeWhile и dropWhile. В первом параметре функционального метода test мы передаем значение, которое необходимо проверить, а метод возвращает результат проверки в виде true или false. Интерфейс Predicate также имеет методы по умолчанию and, or и negate для составления составных условий.

Синтаксис

@FunctionalInterface public interface Predicate<T> { boolean test(T t); default Predicate<T> and(Predicate<? super T> other) default Predicate<T> or(Predicate<? super T> other) default Predicate<T> negate() }

Пример

Давайте создадим предикат, который проверяет, является ли число четным, и применим его к нескольким значениям:

import java.util.function.Predicate; public class Main { public static void main(String[] args) { Predicate<Integer> isEven = n -> n % 2 == 0; System.out.println(isEven.test(4)); System.out.println(isEven.test(7)); System.out.println(isEven.test(10)); } }

Результат выполнения кода:

true false true

Пример

Давайте используем предикат вместе с методом filter для отбора четных чисел из списка:

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> list = List.of(1, 2, 3, 4, 5); Predicate<Integer> isEven = n -> n % 2 == 0; List<Integer> res = list.stream() .filter(isEven) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

[2, 4]

Пример

Давайте объединим два условия с помощью метода and - число должно быть больше 1 и меньше 5:

import java.util.function.Predicate; public class Main { public static void main(String[] args) { Predicate<Integer> moreThanOne = n -> n > 1; Predicate<Integer> lessThanFive = n -> n < 5; Predicate<Integer> combined = moreThanOne.and(lessThanFive); System.out.println(combined.test(3)); System.out.println(combined.test(7)); System.out.println(combined.test(1)); } }

Результат выполнения кода:

true false false

Пример

Давайте применим метод negate для инвертирования условия:

import java.util.function.Predicate; public class Main { public static void main(String[] args) { Predicate<String> isEmpty = s -> s.isEmpty(); Predicate<String> isNotEmpty = isEmpty.negate(); System.out.println(isNotEmpty.test("abcde")); System.out.println(isNotEmpty.test("")); } }

Результат выполнения кода:

true false

Смотрите также

  • метод filter,
    который фильтрует элементы потока по предикату
  • метод test,
    который проверяет значение и возвращает boolean
  • метод and,
    который объединяет два предиката через логическое И
  • метод anyMatch,
    который проверяет, удовлетворяет ли хотя бы один элемент предикату
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить