Ce face Optional.filter
o.filter(conditie) returnează același Optional dacă valoarea există și condiția este adevărată, altfel un Optional gol. Pe un Optional gol, condiția nu se apelează.
Este utilă pentru validări în lanț: „ia codul introdus, păstrează-l doar dacă are 6 cifre, transformă-l în număr, altfel folosește o valoare implicită”.
Parametri
| Parametru | Descriere |
|---|---|
predicate |
Condiția pe care trebuie să o îndeplinească valoarea. |
Ce returnează
Un Optional: cu valoarea, dacă trece condiția, altfel gol.
Exemple
Exemplul 1: Validarea unui cod poștal
import java.util.Optional;
public class Main {
static String verifica(String intrare) {
return Optional.ofNullable(intrare)
.map(String::strip)
.filter(s -> s.matches("\\d{6}"))
.map(s -> "cod valid: " + s)
.orElse("cod invalid");
}
public static void main(String[] args) {
System.out.println(verifica(" 700259 "));
System.out.println(verifica("70025"));
System.out.println(verifica(null));
}
}
Rezultat
cod valid: 700259
cod invalid
cod invalid
Exemplul 2: Doar majorii
import java.util.Optional;
public class Main {
record Persoana(String nume, int varsta) {}
public static void main(String[] args) {
Optional<Persoana> ana = Optional.of(new Persoana("Ana", 19));
Optional<Persoana> radu = Optional.of(new Persoana("Radu", 15));
System.out.println(ana.filter(p -> p.varsta() >= 18).map(Persoana::nume).orElse("minor"));
System.out.println(radu.filter(p -> p.varsta() >= 18).map(Persoana::nume).orElse("minor"));
}
}
Rezultat
Ana
minor
Greșeli frecvente
- Crezi că
filterpeOptionalparcurge mai multe elemente. UnOptionalare cel mult o valoare; pentru liste foloseștestream().filter.
Comenzi înrudite
Optional.map: map transformă valoarea din Optional (dacă există) și o pune într-un Optional nou; flatMap face la fel pentru funcții care returnează deja Optional.Optional: O „cutie” care conține o valoare sau este goală. Arată clar că un rezultat poate lipsi și te obligă să tratezi cazul, în loc de null.Stream.filter: Păstrează în stream doar elementele care îndeplinesc o condiție.Optional.orElse: orElse returnează valoarea sau o rezervă dată; orElseGet calculează rezerva cu o funcție, doar când e nevoie.