Ce face Stream.fromIterable
Stream.fromIterable(lista) emite elementele în ordine, câte unul, asincron, apoi închide stream-ul. Iterable-ul este parcurs abia când cineva ascultă.
Este cel mai simplu mod de a obține un stream pentru teste și exemple, sau de a trece date existente unei funcții care primește Stream.
Parametri
| Parametru | Descriere |
|---|---|
elements |
Elementele emise. |
Ce returnează
Un Stream<T> obișnuit (un singur ascultător).
Exemple
Exemplul 1: Procesarea unei liste ca stream
Future<int> numaraCuvinte(Stream<String> linii) async {
var total = 0;
await for (final l in linii) {
total += l.split(' ').length;
}
return total;
}
Future<void> main() async {
final poezie = Stream.fromIterable([
'Pe lângă plopii fără soț',
'Adesea am trecut',
]);
print('Cuvinte: ${await numaraCuvinte(poezie)}');
}
Rezultat
Cuvinte: 8
Exemplul 2: Elementele vin asincron
Future<void> main() async {
final s = Stream.fromIterable(['a', 'b']);
final gata = s.forEach((x) => print('primit $x'));
print('după crearea ascultării');
await gata;
}
Rezultat
după crearea ascultării
primit a
primit b
Greșeli frecvente
- Modifici lista după ce ai creat stream-ul, dar înainte să fie ascultat. Stream-ul o parcurge abia la ascultare și poate da
ConcurrentModificationErrorsau vedea lista schimbată.
Comenzi înrudite
Stream.value: Stream-uri gata făcute: unul cu o singură valoare, unul cu o singură eroare și unul gol.Stream.fromFuture: fromFuture face un stream cu rezultatul unui future; fromFutures emite rezultatele mai multor future-uri în ordinea terminării.Stream: Un șir de valori care sosesc în timp, una după alta (mesaje, clicuri, linii dintr-un fișier); îl parcurgi cu await for.Iterable: Tipul de bază pentru orice colecție care poate fi parcursă element cu element: List, Set, cheile unui Map.