Iterable.map în Dart

Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.

Sintaxă
Iterable<T> map<T>(T toElement(E e))

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. Un Iterable nu are operatorul [].
  • Pui efecte (de exemplu print) în map fără să parcurgi rezultatul. Nu se întâmplă nimic, pentru că map este leneș. Pentru efecte folosește for-in sau forEach.

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ă.