Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
523 of 1172 menu
◀ ▶

Метод negate

Метод negate класса Predicate возвращает новый предикат, который является логическим отрицанием исходного предиката. Иными словами, если исходный предикат возвращал true, то новый предикат вернет false, и наоборот. Метод не принимает параметров и не изменяет исходный предикат - он создает и возвращает новый объект Predicate.

Метод negate особенно удобен при работе со Stream API, когда нужно инвертировать условие фильтрации, не переписывая логику самого предиката.

Синтаксис

Predicate<T> negate()

Метод возвращает новый предикат типа Predicate<T>, представляющий логическое отрицание исходного предиката.

Пример

Давайте создадим предикат, проверяющий, что число четное, и получим его отрицание:

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

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

true false true

Пример

Давайте используем negate вместе со Stream API, чтобы отфильтровать строки, которые не начинаются с буквы "a":

import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list = List.of("abcde", "bcdef", "acdef", "12345"); Predicate<String> startsWithA = s -> s.startsWith("a"); Predicate<String> notStartsWithA = startsWithA.negate(); List<String> res = list.stream() .filter(notStartsWithA) .collect(Collectors.toList()); System.out.println(res); } }

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

[bcdef, 12345]

Пример

Давайте применим negate к предикату, проверяющему, что число больше 3, и отфильтруем коллекцию:

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> greaterThanThree = n -> n > 3; Predicate<Integer> notGreaterThanThree = greaterThanThree.negate(); List<Integer> res = list.stream() .filter(notGreaterThanThree) .collect(Collectors.toList()); System.out.println(res); } }

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

[1, 2, 3]

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

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