Ce face Iterable.expand
expand primește o funcție care, pentru fiecare element, returnează un iterable. Toate aceste iterabile sunt puse unul după altul într-un singur rezultat. Cu ea „aplatizezi” o listă de liste sau înlocuiești un element cu mai multe.
followedBy returnează un iterable leneș cu elementele primului, urmate de elementele celui de-al doilea. Spre deosebire de + pe liste, nu creează o listă nouă.
Parametri
| Parametru | Descriere |
|---|---|
toElements |
Funcția care returnează elementele care înlocuiesc elementul curent (poate returna o listă goală). |
other |
Pentru followedBy: iterable-ul adăugat la final. |
Ce returnează
Un Iterable leneș.
Exemple
Exemplul 1: Aplatizarea unei liste de liste
void main() {
final clase = [
['Ana', 'Mihai'],
['Ioana'],
<String>[],
['Vlad', 'Elena', 'Radu'],
];
final totiElevii = clase.expand((clasa) => clasa).toList();
print(totiElevii);
print('Total: ${totiElevii.length} elevi');
final dublate = [1, 2, 3].expand((n) => [n, n]);
print(dublate);
}
Rezultat
[Ana, Mihai, Ioana, Vlad, Elena, Radu]
Total: 6 elevi
(1, 1, 2, 2, 3, 3)
Exemplul 2: followedBy: două liste parcurse una după alta
void main() {
final moldova = ['Iași', 'Suceava'];
final ardeal = ['Cluj', 'Sibiu', 'Brașov'];
final traseu = moldova.followedBy(ardeal);
print(traseu);
print('Ultima oprire: ${traseu.last}');
}
Rezultat
(Iași, Suceava, Cluj, Sibiu, Brașov)
Ultima oprire: Brașov
Greșeli frecvente
- Folosești
mapîn loc deexpandși obții un iterable de liste (([Ana, Mihai], [Ioana])) în loc de un iterable de nume.
Comenzi înrudite
Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.List.add: add adaugă un element la sfârșitul listei; addAll adaugă toate elementele unei alte colecții.List.operator+: a + b creează o listă nouă cu elementele lui a urmate de cele ale lui b.Stream.expand: Înlocuiește fiecare valoare a stream-ului cu zero, una sau mai multe valori dintr-un Iterable.