Stream.anyMatch în Java

Verifică dacă cel puțin un element (anyMatch), toate (allMatch) sau niciunul (noneMatch) nu îndeplinesc o condiție.

Sintaxă
boolean anyMatch(Predicate<? super T> conditie)
boolean allMatch(Predicate<? super T> conditie)
boolean noneMatch(Predicate<? super T> conditie)

Ce face Stream.anyMatch

anyMatch returnează true dacă măcar un element respectă condiția. allMatch returnează true dacă toate o respectă. noneMatch returnează true dacă niciun element nu o respectă.

Toate trei se opresc imediat ce știu răspunsul (de exemplu anyMatch la primul element găsit), deci sunt mai rapide decât filter(...).count() > 0.

Pe un stream gol, anyMatch dă false, iar allMatch și noneMatch dau true (nu există niciun element care să contrazică).

Parametri

Parametru Descriere
conditie Condiția verificată pentru elemente.

Ce returnează

true sau false.

Exemple

Exemplul 1: Verificări pe o listă de note

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> note = List.of(8, 9, 4, 10, 7);
        System.out.println("Are vreun 10:       " + note.stream().anyMatch(n -> n == 10));
        System.out.println("Toate de trecere:   " + note.stream().allMatch(n -> n >= 5));
        System.out.println("Nicio notă sub 3:   " + note.stream().noneMatch(n -> n < 3));
    }
}

Rezultat

Are vreun 10:       true
Toate de trecere:   false
Nicio notă sub 3:   true

Exemplul 2: Validarea unui formular

import java.util.List;

public class Main {
    record Camp(String nume, String valoare) {}

    public static void main(String[] args) {
        List<Camp> formular = List.of(
                new Camp("nume", "Ana Pop"), new Camp("email", ""), new Camp("oraș", "Iași"));

        boolean complet = formular.stream().noneMatch(c -> c.valoare().isBlank());
        System.out.println("Formular complet: " + complet);
        formular.stream().filter(c -> c.valoare().isBlank())
                .forEach(c -> System.out.println("Lipsește: " + c.nume()));
    }
}

Rezultat

Formular complet: false
Lipsește: email

Exemplul 3: Stream gol și oprirea timpurie

import java.util.List;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<Integer> gol = List.of();
        System.out.println("any:  " + gol.stream().anyMatch(n -> n > 0));
        System.out.println("all:  " + gol.stream().allMatch(n -> n > 0));
        System.out.println("none: " + gol.stream().noneMatch(n -> n > 0));

        boolean gasit = Stream.of(1, 2, 3, 4, 5)
                .peek(n -> System.out.println("verific " + n))
                .anyMatch(n -> n == 2);
        System.out.println("găsit: " + gasit);
    }
}

Rezultat

any:  false
all:  true
none: true
verific 1
verific 2
găsit: true

Greșeli frecvente

  • Aștepți false de la allMatch pe o listă goală. Rezultatul este true; verifică separat dacă lista e goală.
  • Scrii filter(...).count() > 0. Este corect, dar parcurge toate elementele; anyMatch se oprește la primul găsit.

Comenzi înrudite

  • Stream.filter: Păstrează în stream doar elementele care îndeplinesc o condiție.
  • Stream.findFirst: Returnează primul element din stream (findFirst) sau oricare element (findAny), ca Optional.
  • Predicate: O condiție: primește o valoare și răspunde true sau false prin metoda test; folosită de filter, removeIf, anyMatch.
  • Stream.count: Returnează numărul de elemente din stream, de tip long.