Ce face Iterable.where
where returnează un iterable leneș cu elementele pentru care funcția test returnează true, în ordinea inițială. Este echivalentul unui filtru.
whereType<T>() păstrează doar elementele de tipul T, iar rezultatul are chiar tipul Iterable<T>. Este util pe liste amestecate (List<Object>) sau pentru a scăpa de null (vezi și nonNulls).
Parametri
| Parametru | Descriere |
|---|---|
test |
Funcția care primește un element și spune dacă îl păstrăm. |
T |
Pentru whereType: tipul elementelor păstrate. |
Ce returnează
Un Iterable leneș cu elementele păstrate.
Exemple
Exemplul 1: Elevii promovați
void main() {
final note = {'Ana': 9.5, 'Mihai': 4.0, 'Ioana': 7.25, 'Vlad': 3.5};
final promovati = note.entries.where((e) => e.value >= 5).map((e) => e.key);
print('Promovați: ${promovati.join(', ')}');
final pare = [1, 2, 3, 4, 5, 6].where((n) => n.isEven);
print(pare);
}
Rezultat
Promovați: Ana, Ioana
(2, 4, 6)
Exemplul 2: whereType pe o listă amestecată
void main() {
final date = <Object?>['Iași', 42, 'Cluj', null, 3.5, 7];
final Iterable<String> texte = date.whereType<String>();
final numereIntregi = date.whereType<int>();
print(texte);
print(numereIntregi);
print('suma întregilor: ${numereIntregi.fold(0, (a, b) => a + b)}');
}
Rezultat
(Iași, Cluj)
(42, 7)
suma întregilor: 49
Greșeli frecvente
- Folosești
where(...).firstcând e posibil să nu existe niciun element: aruncăStateError. FoloseștefirstWherecuorElsesaufirstOrNull.
Comenzi înrudite
Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.Iterable.firstWhere: Găsește primul, ultimul sau singurul element care trece un test, cu o valoare de rezervă opțională (orElse).Iterable.nonNulls: Elementele care nu sunt null, cu tipul ne-nullabil (din Iterable<T?> obții Iterable<T>).List.removeWhere: removeWhere șterge toate elementele care trec testul; retainWhere le păstrează doar pe ele.Stream.map: Creează un stream nou în care fiecare valoare este transformată cu o funcție sincronă.