Iterable.where în Dart

Păstrează doar elementele care trec un test; whereType păstrează doar elementele de un anumit tip.

Sintaxă
Iterable<E> where(bool test(E element))
Iterable<T> whereType<T>()

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(...).first când e posibil să nu existe niciun element: aruncă StateError. Folosește firstWhere cu orElse sau firstOrNull.

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ă.