Ce face Map.forEach
map.forEach((cheie, valoare) -> ...) este cea mai scurtă formă de a parcurge un map: lambda primește direct cheia și valoarea, fără Map.Entry. Ordinea este a map-ului: sortată la TreeMap, a adăugării la LinkedHashMap.
În lambda nu poți folosi break, iar variabilele locale din afară pe care le modifici trebuie să fie „efectiv finale”. Pentru sume sau opriri anticipate, folosește un for-each pe entrySet().
Parametri
| Parametru | Descriere |
|---|---|
action |
Funcția apelată cu fiecare cheie și valoare (un BiConsumer). |
Ce returnează
Nimic (void).
Exemple
Exemplul 1: Afișarea unui orar
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, String> orar = new LinkedHashMap<>();
orar.put("08:00", "Matematică");
orar.put("09:00", "Română");
orar.put("10:00", "Engleză");
orar.forEach((ora, materie) -> System.out.println(ora + " " + materie));
}
}
Rezultat
08:00 Matematică
09:00 Română
10:00 Engleză
Exemplul 2: Raport formatat din TreeMap
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Map<String, Integer> stoc = new TreeMap<>(Map.of("mere", 40, "banane", 12, "kiwi", 0));
stoc.forEach((produs, kg) -> System.out.printf("%-8s %3d kg %s%n", produs, kg, kg == 0 ? "(epuizat)" : ""));
}
}
Rezultat
banane 12 kg
kiwi 0 kg (epuizat)
mere 40 kg
Greșeli frecvente
- Încerci să aduni într-o variabilă locală
intdin lambda (suma += v). Compilatorul refuză; folosește un for-each saumap.values().stream().mapToInt(...).sum(). - Modifici map-ul (
put/remove) înforEach. ApareConcurrentModificationException.
Comenzi înrudite
Map.entrySet: entrySet() dă perechile cheie-valoare ale unui map, ca obiecte Map.Entry; Map.entry(k, v) creează o astfel de pereche.Iterable: Interfața care permite bucla for-each: orice obiect Iterable poate fi parcurs cu for (T x : obiect) și cu forEach.Map.keySet: keySet() dă mulțimea cheilor unui map, values() colecția valorilor. Sunt vederi legate de map, nu copii.LinkedHashMap: HashMap care ține minte ordinea în care au fost adăugate cheile; parcurgerea și afișarea respectă această ordine.