Ce face Iterable.map
map aplică funcția primită pe fiecare element și produce un nou Iterable cu rezultatele, în aceeași ordine. Tipul rezultatului poate fi diferit: din List<int> poți obține un Iterable<String>.
Rezultatul este leneș: funcția rulează abia când parcurgi iterable-ul. Pentru o listă reală adaugă .toList(). Nu confunda cu metoda map a unui Map, care transformă perechi cheie–valoare.
Parametri
| Parametru | Descriere |
|---|---|
toElement |
Funcția care primește un element și returnează valoarea nouă. |
Ce returnează
Un Iterable<T> leneș cu valorile transformate.
Exemple
Exemplul 1: Prețuri cu TVA
void main() {
final preturi = [10.0, 25.5, 99.9];
final cuTva = preturi.map((p) => p * 1.19);
print(cuTva.map((p) => p.toStringAsFixed(2)).toList());
final etichete = preturi.map((p) => '${p.toStringAsFixed(2)} lei').toList();
print(etichete);
}
Rezultat
[11.90, 30.34, 118.88]
[10.00 lei, 25.50 lei, 99.90 lei]
Exemplul 2: Din obiecte în text
Tipul rezultatului se schimbă: din records (String, int) obținem texte.
void main() {
final elevi = [('Ana', 10), ('Mihai', 8), ('Ioana', 9)];
final randuri = elevi.map((e) => '${e.$1}: nota ${e.$2}');
for (final r in randuri) {
print(r);
}
final initiale = elevi.map((e) => e.$1[0]).join();
print('Inițiale: $initiale');
}
Rezultat
Ana: nota 10
Mihai: nota 8
Ioana: nota 9
Inițiale: AMI
Greșeli frecvente
- Uiți
.toList()și primești(…)în loc de[…], sau nu poți folosi[i]pe rezultat. UnIterablenu are operatorul[]. - Pui efecte (de exemplu
print) înmapfără să parcurgi rezultatul. Nu se întâmplă nimic, pentru cămapeste leneș. Pentru efecte foloseștefor-insauforEach.
Comenzi înrudite
Iterable.where: Păstrează doar elementele care trec un test; whereType păstrează doar elementele de un anumit tip.Iterable.expand: expand transformă fiecare element în zero sau mai multe elemente și le pune cap la cap; followedBy lipește două iterabile.Iterable.toList: toList copiază elementele într-o listă nouă; toSet le copiază într-un set nou, fără duplicate.Map.map: Creează un map nou transformând fiecare pereche într-o pereche nouă, cu alte chei sau alte valori.Stream.map: Creează un stream nou în care fiecare valoare este transformată cu o funcție sincronă.