Predicate.not în Java

Inversează o condiție dată ca referință de metodă: filter(Predicate.not(String::isBlank)) păstrează textele care nu sunt goale.

Sintaxă
static <T> Predicate<T> not(Predicate<? super T> conditie)

Ce face Predicate.not

Predicate.not(p) returnează predicatul invers, ca p.negate(). Diferența este că primește direct o referință de metodă: Predicate.not(String::isBlank). Cu negate() ar trebui întâi o variabilă sau o conversie, pentru că String::isBlank.negate() nu compilează.

De obicei se importă static: import static java.util.function.Predicate.not;, ca să scrii filter(not(String::isBlank)), care se citește ca o propoziție.

Parametri

Parametru Descriere
conditie Predicatul de inversat, de obicei o referință de metodă.

Ce returnează

Un Predicate care dă true exact când conditie dă false.

Exemple

Exemplul 1: Rânduri care nu sunt goale

import java.util.List;
import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        List<String> randuri = List.of("Ana", "  ", "Mihai", "", "Elena");
        List<String> pline = randuri.stream().filter(Predicate.not(String::isBlank)).toList();
        System.out.println(pline);
    }
}

Rezultat

[Ana, Mihai, Elena]

Exemplul 2: Cu import static

Studenții care nu sunt în lista de absenți; absenti::contains este condiția, iar not o inversează.

import static java.util.function.Predicate.not;

import java.util.List;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        List<String> grupa = List.of("Ana", "Radu", "Ioana", "Dan");
        Set<String> absenti = Set.of("Radu", "Dan");
        System.out.println("Prezenți: " + grupa.stream().filter(not(absenti::contains)).toList());
    }
}

Rezultat

Prezenți: [Ana, Ioana]

Greșeli frecvente

  • Scrii filter(!String::isBlank) sau filter(String::isBlank.negate()): niciuna nu compilează. Folosește Predicate.not(String::isBlank).
  • Folosești Predicate.not pe Java 8–10: metoda există doar din Java 11.

Comenzi înrudite

  • Predicate: O condiție: primește o valoare și răspunde true sau false prin metoda test; folosită de filter, removeIf, anyMatch.
  • Predicate.and: Combină condiții: and (ambele adevărate), or (cel puțin una) și negate (condiția inversă).
  • Stream.filter: Păstrează în stream doar elementele care îndeplinesc o condiție.
  • String.strip: Elimină spațiile de la începutul și sfârșitul șirului; stripLeading/stripTrailing doar dintr-o parte.