Ce face Optional.isPresent
isPresent() returnează true dacă există valoare, iar isEmpty() (din Java 11) este opusul. get() returnează valoarea, dar pe un Optional gol aruncă NoSuchElementException.
Combinația if (o.isPresent()) { ... o.get() ... } funcționează, dar seamănă cu verificarea de null pe care Optional încearcă să o înlocuiască. De obicei e mai clar cu ifPresent, orElse sau map. get() face același lucru ca orElseThrow(), iar acesta din urmă are un nume mai clar.
Ce returnează
isPresent/isEmpty: boolean. get: valoarea.
Exemple
Exemplul 1: Verificare și citire
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<Integer> note = List.of(7, 9, 4, 10);
Optional<Integer> primaRestanta = note.stream().filter(n -> n < 5).findFirst();
Optional<Integer> primaSub3 = note.stream().filter(n -> n < 3).findFirst();
System.out.println(primaRestanta.isPresent() + " " + primaRestanta.isEmpty());
System.out.println(primaSub3.isPresent() + " " + primaSub3.isEmpty());
if (primaRestanta.isPresent()) {
System.out.println("Prima notă sub 5: " + primaRestanta.get());
}
}
}
Rezultat
true false
false true
Prima notă sub 5: 4
Exemplul 2: get() pe un Optional gol
import java.util.NoSuchElementException;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> gol = Optional.empty();
try {
System.out.println(gol.get());
} catch (NoSuchElementException e) {
System.out.println("get pe gol: " + e.getMessage());
}
}
}
Rezultat
get pe gol: No value present
Greșeli frecvente
- Apelezi
get()fărăisPresent(). Pe gol aruncă excepție. - Scrii
if (o.isPresent()) return o.get(); else return "x";. Este exacto.orElse("x").
Comenzi înrudite
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.Optional.ifPresent: ifPresent execută o acțiune doar dacă există valoare; ifPresentOrElse are și o acțiune separată pentru cazul gol.Optional.orElse: orElse returnează valoarea sau o rezervă dată; orElseGet calculează rezerva cu o funcție, doar când e nevoie.Optional.orElseThrow: Returnează valoarea sau, dacă Optional-ul e gol, aruncă o excepție: NoSuchElementException sau excepția creată de tine.