Dart: List, Map, Set y Métodos Funcionales

map(), where(), reduce() y fold() — el pan de cada día en Flutter

📋 1. List y métodos funcionales

Resultado:

numeros
[1, 2, 3, 4, 5, 5, 3]
.map((n) => n * 2)
[2, 4, 6, 8, 10, 10, 6]
.where((n) => n > 3)
[4, 5, 5]
.reduce((a, b) => a + b)
23
.fold(0, (a, b) => a + b)
23
Set (sin duplicados)
{1, 2, 3, 4, 5}

Prueba con tus propios números

final numeros = [1, 2, 3, 4, 5, 5, 3];

final mapeados  = numeros.map((n) => n * 2).toList();
final filtrados = numeros.where((n) => n > 3).toList();
final suma      = numeros.reduce((a, b) => a + b);
final total     = numeros.fold(0, (acc, n) => acc + n);
final unicos    = numeros.toSet(); // elimina duplicados
// Spread operator: combinar listasfinal combinada = [0, ...numeros, 100];
💡 reduce() vs fold()

reduce() usa el primer elemento como valor inicial (falla si la lista está vacía). fold() recibe un valor inicial explícito (aquí 0), así que funciona incluso con listas vacías.

🗂️ 2. Map (clave-valor)

Resultado:

manzana
3
pera
5
uva
12
containsKey('pera')
true

Prueba con tu propio mapa

final frutas = {'manzana': 3, 'pera': 5, 'uva': 12};

frutas.forEach((clave, valor) => print('$clave: $valor'));

for (final entrada in frutas.entries) {
  print('${entrada.key} -> ${entrada.value}');
}

print(frutas.containsKey('pera')); // true

🎯 Conceptos Clave

List

  • Ordenada, permite duplicados
  • [...] para crearla, const [...] si es inmutable

Map

  • Pares clave-valor
  • .entries, .keys, .values

Set

  • Sin duplicados, sin orden garantizado
  • {...} o .toSet()

💪 Ejercicio Práctico

Combina los métodos funcionales

  1. A partir de una lista de nombres, usa .where() para quedarte solo con los que empiezan por una letra concreta.
  2. Usa .map() seguido de .join(', ') para construir una frase con los precios con IVA de una lista.
  3. Usa el spread operator (...) para insertar los elementos de una lista dentro de otra.

Solución 1

final nombres = ['Ana', 'Luis', 'Andrea', 'Marta'];
final conA = nombres.where((n) => n.startsWith('A')).toList();

Solución 2

final precios = [10, 25, 50];
final frase = precios.map((p) => '${(p * 1.21).toStringAsFixed(2)}€').join(', ');

Solución 3

final base = [2, 3];
final extendida = [1, ...base, 4]; // [1, 2, 3, 4]