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
falsede laallMatchpe o listă goală. Rezultatul estetrue; verifică separat dacă lista e goală. - Scrii
filter(...).count() > 0. Este corect, dar parcurge toate elementele;anyMatchse 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.