Stream.fromIterable în Dart

Creează un stream care emite, pe rând, elementele unei liste sau ale altui Iterable, apoi se închide.

Sintaxă
factory Stream<T>.fromIterable(Iterable<T> elements)

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 ConcurrentModificationError sau 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.