Colecciones: List, Set y Map
Una variable guarda un dato. Estas tres guardan muchos, y elegir mal entre ellas es lo que separa el código que aguanta 200 registros del que no.
✓ En esta sub-lección
- 01Elegir entre List, Set y Map según la pregunta que tengas que responder.
- 02Crear colecciones y añadir, leer y consultar sus elementos.
- 03Anticipar qué devuelve un Map cuando la clave no existe.
La nutria: ¿Te acuerdas? · Repaso de la lección 7
Si region vale ' ' (solo espacios), ¿qué devuelve String.isBlank(region) ? 'Sin región' : region?
Abre una cuenta y mira la lista relacionada de contactos: filas en un orden, con posibles repeticiones de nombre. Abre el filtro de un informe por Industry: valores únicos, sin repetir. Y piensa en cómo cruzas dos exportaciones por Id. Acabas de recorrer List, Set y Map.
Cómo se declara una colección
Una colección declara dos cosas: qué tipo de colección es y qué guarda dentro, entre los símbolos de mayor y menor. List<String> es «una lista de textos» y no aceptará números. Es la misma promesa del tipo de la primera sub-lección, aplicada al contenido.
List<String> regions = new List<String>();
List<String> stages = new List<String>{ 'Prospecting', 'Closed Won' };
Set<Id> accountIds = new Set<Id>();
Map<Id, Account> accountsById = new Map<Id, Account>();List: orden y posiciones
Una List mantiene el orden en que metiste las cosas y admite repetidos. Cada elemento tiene una posición, empezando en 0, igual que substring, y por la misma convención.
| Método | Qué hace | Devuelve |
|---|---|---|
| add(valor) | Añade al final. | nada |
| get(0) o lista[0] | Lee la posición indicada. | el elemento |
| size() | Cuántos elementos hay. | Integer |
| isEmpty() | ¿Está vacía? | Boolean |
| contains(valor) | ¿Está dentro? | Boolean |
| sort() | Ordena la lista en el sitio. | nada |
List<String> pipeline = new List<String>();
pipeline.add('Prospecting');
pipeline.add('Negotiation');
pipeline.add('Prospecting'); // repetido: la List lo acepta
Integer howMany = pipeline.size(); // 3
String first = pipeline.get(0); // 'Prospecting'
Boolean empty = pipeline.isEmpty(); // falseSet: sin repetidos
Un Set ignora los duplicados: si añades dos veces el mismo valor, sigue habiendo uno. A cambio, no tiene posiciones (no puedes pedirle «el tercero») y no garantiza el orden. Es la colección que usas cuando la pregunta es «¿está esto aquí?» o «¿cuáles son los valores distintos?».
Set<String> industries = new Set<String>();
industries.add('Technology');
industries.add('Retail');
industries.add('Technology'); // se descarta
Integer distinct = industries.size(); // 2
Boolean hasRetail = industries.contains('Retail'); // trueLa nutria: El Set que ya usabas sin saberlo
Map: buscar por clave
Un Map guarda parejas: una clave y un valor. Le das la clave y te devuelve el valor, sin recorrer nada. Es el cruce por Id que harías en una hoja de cálculo, pero instantáneo, y es la estructura que sostiene prácticamente todo el Apex de producción.
Map<String, Decimal> quotaByRegion = new Map<String, Decimal>();
quotaByRegion.put('EMEA', 150000);
quotaByRegion.put('AMER', 220000);
Decimal emeaQuota = quotaByRegion.get('EMEA'); // 150000
Boolean hasApac = quotaByRegion.containsKey('APAC'); // false
Integer regions = quotaByRegion.size(); // 2Decimal apacQuota = quotaByRegion.get('APAC'); // null
Decimal safeQuota = quotaByRegion.containsKey('APAC')
? quotaByRegion.get('APAC')
: 0; // 0List<String> regionList = new List<String>();
Set<String> regionSet = new Set<String>();
Map<String, Decimal> quotaByRegion = new Map<String, Decimal>();LIST · ORDEN Y REPETIDOSsize() = 0
SET · SIN REPETIDOSsize() = 0
MAP · CLAVE → VALORsize() = 0
Paso 1 de 9
Tres colecciones vacías. List es una lista relacionada: orden y repetidos. Set es la columna de agrupación de un informe: valores únicos. Map es un BUSCARV: das la clave y te devuelve el valor.
Cuál elegir
| Si necesitas… | Usa | Porque |
|---|---|---|
| Conservar el orden o admitir repetidos | List | Es la única con posiciones. |
| Valores únicos, o preguntar «¿está?» | Set | Descarta duplicados por diseño. |
| Encontrar algo por una clave | Map | Responde sin recorrer la colección. |