Ce face Map.of
Map.of(k1, v1, k2, v2, ...) creează rapid un map fix, cu cel mult 10 perechi. Pentru mai multe perechi folosești Map.ofEntries(Map.entry(k1, v1), Map.entry(k2, v2), ...), fără limită. Cheile duplicate dau IllegalArgumentException, iar null nu este permis nici la chei, nici la valori.
Map.copyOf(altMap) face o copie nemodificabilă; schimbările ulterioare ale originalului nu se văd în copie. Dacă altMap este deja nemodificabil, poate returna chiar același obiect.
Map-urile create astfel aruncă UnsupportedOperationException la put, remove, clear. Ordinea perechilor la parcurgere nu este garantată și se schimbă între rulări: pentru afișare ordonată, copiază în TreeMap.
Parametri
| Parametru | Descriere |
|---|---|
k1, v1, ... |
Cheile și valorile, alternativ. |
entries |
Perechi create cu Map.entry(k, v). |
map |
Map-ul de copiat. |
Ce returnează
Un map nemodificabil.
Exemple
Exemplul 1: Tabel de conversie fix
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Double> curs = Map.of("EUR", 5.09, "USD", 4.38, "GBP", 5.87);
double suma = 100;
System.out.println(suma + " EUR = " + suma * curs.get("EUR") + " lei");
System.out.println("Monede: " + curs.size());
}
}
Rezultat
100.0 EUR = 509.0 lei
Monede: 3
Exemplul 2: ofEntries pentru mai multe perechi
Afișăm prin TreeMap, pentru că ordinea unui Map.ofEntries se schimbă de la o rulare la alta.
import java.util.Map;
import java.util.TreeMap;
import static java.util.Map.entry;
public class Main {
public static void main(String[] args) {
Map<String, String> judete = Map.ofEntries(
entry("AB", "Alba"), entry("AR", "Arad"), entry("BV", "Brașov"),
entry("CJ", "Cluj"), entry("CT", "Constanța"), entry("IS", "Iași"),
entry("SB", "Sibiu"), entry("SV", "Suceava"), entry("TM", "Timiș"),
entry("VS", "Vaslui"), entry("B", "București"));
System.out.println(judete.size() + " județe");
System.out.println(new TreeMap<>(judete).headMap("C"));
}
}
Rezultat
11 județe
{AB=Alba, AR=Arad, B=București, BV=Brașov}
Exemplul 3: copyOf: o copie care nu se mai schimbă
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> curent = new HashMap<>();
curent.put("Ana", 9);
Map<String, Integer> instantaneu = Map.copyOf(curent);
curent.put("Radu", 7);
System.out.println("Original: " + curent.size() + " perechi, copie: " + instantaneu.size());
try {
instantaneu.put("Elena", 10);
} catch (UnsupportedOperationException e) {
System.out.println("Copia nu se poate modifica");
}
try {
Map.of("Ana", 1, "Ana", 2);
} catch (IllegalArgumentException e) {
System.out.println("Map.of cu cheie duplicată: IllegalArgumentException");
}
}
}
Rezultat
Original: 2 perechi, copie: 1
Copia nu se poate modifica
Map.of cu cheie duplicată: IllegalArgumentException
Greșeli frecvente
- Afișezi direct un
Map.ofși aștepți aceeași ordine. Ordinea se schimbă între rulări. - Scrii
Map.ofcu 11 perechi. Nu există o asemenea variantă; foloseșteMap.ofEntries. - Pui o valoare
null.Map.ofaruncăNullPointerException.
Comenzi înrudite
Map: Interfața pentru dicționare: perechi cheie → valoare, în care găsești rapid valoarea după cheie. Cheile sunt unice.Map.entrySet: entrySet() dă perechile cheie-valoare ale unui map, ca obiecte Map.Entry; Map.entry(k, v) creează o astfel de pereche.Set.of: Creează o mulțime nemodificabilă din valorile date (of) sau dintr-o colecție existentă (copyOf). Ordinea nu este garantată.List.of: Creează o listă nemodificabilă din valorile date (of) sau dintr-o copie a altei colecții (copyOf).Map.ofLazy: Map nemodificabil cu chei fixe, a cărui valoare pentru fiecare cheie se calculează abia la prima citire, apoi se păstrează.