Ce face Optional.equals
a.equals(b) returnează true dacă ambele sunt Optional-uri goale sau dacă amândouă au valori egale (comparate cu equals). Un Optional nu este niciodată egal cu valoarea „goală” din el: Optional.of(5).equals(5) este false.
hashCode() este codul hash al valorii (0 pentru gol). toString() returnează Optional[valoare] sau Optional.empty; formatul este pentru depanare, nu pentru afișarea către utilizatori.
Nu compara Optional-uri cu ==: rezultatul depinde de faptul că sunt sau nu același obiect.
Parametri
| Parametru | Descriere |
|---|---|
obj |
Obiectul cu care se compară. |
Ce returnează
equals: boolean. hashCode: int. toString: String.
Exemple
Exemplul 1: Comparare și afișare
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> a = Optional.of("Iași");
Optional<String> b = Optional.of("Ia" + "și".strip());
Optional<String> gol1 = Optional.empty();
Optional<String> gol2 = Optional.ofNullable(null);
System.out.println("a = b: " + a.equals(b));
System.out.println("gol = gol: " + gol1.equals(gol2));
System.out.println("a = \"Iași\": " + a.equals("Iași"));
System.out.println(a + " " + gol1);
System.out.println("hash gol: " + gol1.hashCode() + ", hash egal: " + (a.hashCode() == "Iași".hashCode()));
}
}
Rezultat
a = b: true
gol = gol: true
a = "Iași": false
Optional[Iași] Optional.empty
hash gol: 0, hash egal: true
Exemplul 2: Test simplu pentru o metodă de căutare
import java.util.List;
import java.util.Optional;
public class Main {
static Optional<String> primulLung(List<String> cuvinte) {
return cuvinte.stream().filter(c -> c.length() > 5).findFirst();
}
public static void main(String[] args) {
boolean t1 = primulLung(List.of("mar", "portocală", "kiwi")).equals(Optional.of("portocală"));
boolean t2 = primulLung(List.of("mar", "kiwi")).equals(Optional.empty());
System.out.println("Test 1: " + (t1 ? "trecut" : "picat"));
System.out.println("Test 2: " + (t2 ? "trecut" : "picat"));
}
}
Rezultat
Test 1: trecut
Test 2: trecut
Greșeli frecvente
- Compari un
Optionaldirect cu o valoare:opt.equals("x")e mereufalse. Scrieopt.equals(Optional.of("x"))sauopt.filter("x"::equals).isPresent(). - Afișezi
Optional-ul direct utilizatorilor și apareOptional[...]. Scoate valoarea cuorElse.
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.of: of(x) creează un Optional cu o valoare sigur prezentă, ofNullable(x) unul care e gol dacă x este null, empty() unul gol.Set.equals: Două mulțimi sunt egale dacă au exact aceleași elemente, indiferent de ordine sau de implementare (HashSet, TreeSet).List.equals: Două liste sunt egale dacă au aceleași elemente în aceeași ordine, indiferent de clasa lor; hashCode urmează aceeași regulă.