Map.get în Java

Dicționare (Map, HashMap, TreeMap) Java 1.2 (getOrDefault: Java 8)

get returnează valoarea unei chei sau null dacă lipsește; getOrDefault returnează o valoare de rezervă în loc de null.

Sintaxă
V get(Object key)
default V getOrDefault(Object key, V defaultValue)

Ce face Map.get

map.get(cheie) caută cheia și returnează valoarea ei. Dacă cheia nu există, returnează null. Atenție la tipurile numerice: int x = map.get("lipsă"); aruncă NullPointerException, pentru că null nu se poate transforma în int.

getOrDefault(cheie, rezerva) returnează valoarea, iar dacă cheia lipsește returnează rezerva. Map-ul nu se modifică. Este forma comodă pentru numărători și setări cu valori implicite.

Parametri

Parametru Descriere
key Cheia căutată.
defaultValue Valoarea returnată când cheia nu există.

Ce returnează

Valoarea găsită, null (la get) sau valoarea de rezervă.

Exemple

Exemplul 1: Prefixul telefonic al județului

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, String> prefixe = Map.of("Iași", "0232", "Cluj", "0264", "București", "021");
        System.out.println("Iași: " + prefixe.get("Iași"));
        System.out.println("Vaslui: " + prefixe.get("Vaslui"));
        System.out.println("Vaslui: " + prefixe.getOrDefault("Vaslui", "necunoscut"));
    }
}

Rezultat

Iași: 0232
Vaslui: null
Vaslui: necunoscut

Exemplul 2: Numărarea literelor cu getOrDefault

import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        Map<Character, Integer> litere = new TreeMap<>();
        for (char c : "mississippi".toCharArray()) {
            litere.put(c, litere.getOrDefault(c, 0) + 1);
        }
        System.out.println(litere);
    }
}

Rezultat

{i=4, m=1, p=2, s=4}

Exemplul 3: null în int: NullPointerException

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> note = Map.of("Ana", 9);
        try {
            int n = note.get("Radu");
            System.out.println(n);
        } catch (NullPointerException e) {
            System.out.println("Radu nu are notă: get a returnat null");
        }
        int sigur = note.getOrDefault("Radu", 0);
        System.out.println("Cu getOrDefault: " + sigur);
    }
}

Rezultat

Radu nu are notă: get a returnat null
Cu getOrDefault: 0

Greșeli frecvente

  • Pui rezultatul lui get direct într-un int/double. Dacă cheia lipsește, apare NullPointerException.
  • Folosești get(x) == null ca să afli dacă cheia există, deși map-ul poate ține valori null. Folosește containsKey.
  • Crezi că getOrDefault adaugă valoarea de rezervă în map. Nu o adaugă; pentru asta există putIfAbsent și computeIfAbsent.

Comenzi înrudite

  • Map: Interfața pentru dicționare: perechi cheie → valoare, în care găsești rapid valoarea după cheie. Cheile sunt unice.
  • Map.put: put adaugă o pereche cheie → valoare sau înlocuiește valoarea unei chei existente; putAll copiază toate perechile altui map.
  • Map.containsKey: containsKey verifică rapid dacă o cheie există în map; containsValue caută o valoare, mai lent, printre toate perechile.
  • Map.computeIfAbsent: Dacă cheia lipsește, calculează valoarea cu funcția dată și o pune în map. Returnează valoarea (nouă sau existentă). Ideal pentru grupări.
  • 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.