Ce face Stream.distinct
distinct compară fiecare valoare cu ultima valoare emisă; dacă sunt egale, o ignoră. Nu elimină toate duplicatele, ca un Set, ci doar repetările consecutive.
Cu funcția equals poți decide tu când două valori sunt „la fel”, de exemplu după un singur câmp sau cu o toleranță.
Parametri
| Parametru | Descriere |
|---|---|
equals |
Opțional: funcția care spune dacă două valori consecutive sunt egale. |
Ce returnează
Un Stream<T> nou.
Exemple
Exemplul 1: Starea conexiunii, fără repetări
Future<void> main() async {
final stari = Stream.fromIterable(['online', 'online', 'offline', 'offline', 'online', 'offline']);
print(await stari.distinct().toList());
}
Rezultat
[online, offline, online, offline]
Exemplul 2: Temperatura afișată doar la o schimbare de cel puțin 1 grad
Future<void> main() async {
final citiri = Stream.fromIterable([20.1, 20.4, 20.9, 21.3, 21.5, 23.0]);
final afisate = citiri.distinct((anterior, urmator) => (urmator - anterior).abs() < 1);
print(await afisate.toList());
}
Rezultat
[20.1, 21.3, 23.0]
Greșeli frecvente
- Te aștepți ca
distinctsă elimine toate duplicatele. Elimină doar valorile egale cu cea de dinainte; pentru unicitate completă, foloseștetoSet().
Comenzi înrudite
Stream.where: Creează un stream nou care lasă să treacă doar valorile pentru care testul este adevărat.Stream.toList: Adună toate valorile stream-ului într-o listă (sau într-un set) când stream-ul se închide.Set: Colecție fără elemente duplicate: fiecare valoare apare o singură dată, iar căutarea este rapidă.