Stream.join în Dart

Lipește toate valorile stream-ului într-un singur text, cu un separator opțional între ele.

Sintaxă
Future<String> join([String separator = ""])

Ce face Stream.join

join transformă fiecare valoare în text cu toString() și le lipește, în ordinea sosirii, punând separatorul între ele. Future-ul se termină la închiderea stream-ului.

Fără separator, valorile sunt lipite direct una de alta.

Parametri

Parametru Descriere
separator Opțional: textul pus între valori (implicit gol).

Ce returnează

Un Future<String>.

Exemple

Exemplul 1: Lista participanților

Future<void> main() async {
  final inscrisi = Stream.fromIterable(['Ana', 'Mihai', 'Ioana']);
  print('Participanți: ${await inscrisi.join(', ')}');
}

Rezultat

Participanți: Ana, Mihai, Ioana

Exemplul 2: Text primit pe bucăți

Stream<String> bucati() async* {
  for (final b in ['Dart ', 'este ', 'un ', 'limbaj ', 'prietenos.']) {
    await Future.delayed(const Duration(milliseconds: 5));
    yield b;
  }
}

Future<void> main() async {
  print(await bucati().join());
  print(await Stream.fromIterable([1, 2, 3]).join(' + '));
}

Rezultat

Dart este un limbaj prietenos.
1 + 2 + 3

Greșeli frecvente

  • Folosești join pe un stream infinit. Future-ul nu se termină niciodată.

Comenzi înrudite

  • Stream.fold: Combină toate valorile stream-ului într-un singur rezultat (sumă, maxim, text); fold pornește de la o valoare dată.
  • Iterable.join: Lipește elementele într-un singur text, cu un separator între ele.
  • Stream.toList: Adună toate valorile stream-ului într-o listă (sau într-un set) când stream-ul se închide.