Stream.takeWhile în Dart

takeWhile emite valori cât timp testul este adevărat și apoi se închide; skipWhile sare peste ele până la primul fals.

Sintaxă
Stream<T> takeWhile(bool test(T element))
Stream<T> skipWhile(bool test(T element))

Ce face Stream.takeWhile

takeWhile emite valorile cât timp testul returnează true. La primul false, închide stream-ul nou; valoarea care a picat testul nu este emisă.

skipWhile ignoră valorile de la început cât timp testul este adevărat. De la primul false încolo, emite totul, chiar dacă valori de mai târziu ar trece testul.

Parametri

Parametru Descriere
test Funcția care decide până unde se iau sau se sar valorile.

Ce returnează

Un Stream<T> nou.

Exemple

Exemplul 1: Citirea până la cuvântul „STOP”

Future<void> main() async {
  final comenzi = Stream.fromIterable(['înainte', 'stânga', 'STOP', 'dreapta']);
  await comenzi.takeWhile((c) => c != 'STOP').forEach((c) => print('execut: $c'));
}

Rezultat

execut: înainte
execut: stânga

Exemplul 2: skipWhile: ignoră încălzirea

Valorile sub 50 de la început sunt sărite. 40 de la final apare, pentru că skipWhile s-a oprit deja.

Future<void> main() async {
  final turatii = Stream.fromIterable([10, 25, 48, 60, 75, 40]);
  print(await turatii.skipWhile((t) => t < 50).toList());
}

Rezultat

[60, 75, 40]

Greșeli frecvente

  • Folosești takeWhile ca filtru. După primul false nu mai vine nimic; pentru filtrare folosește where.

Comenzi înrudite

  • Stream.take: take păstrează doar primele n valori și apoi închide stream-ul; skip sare peste primele n valori.
  • Stream.where: Creează un stream nou care lasă să treacă doar valorile pentru care testul este adevărat.
  • Iterable.takeWhile: takeWhile păstrează elementele de la început cât timp trec testul; skipWhile le sare cât timp trec testul.