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
- A partir de una lista de nombres, usa
.where()para quedarte solo con los que empiezan por una letra concreta. - Usa
.map()seguido de.join(', ')para construir una frase con los precios con IVA de una lista. - 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]