List.removeWhere în Dart

List: liste Dart 2.0

removeWhere șterge toate elementele care trec testul; retainWhere le păstrează doar pe ele.

Sintaxă
void removeWhere(bool test(E element))
void retainWhere(bool test(E element))

Ce face List.removeWhere

removeWhere modifică lista pe loc și șterge fiecare element pentru care test returnează true. retainWhere face opusul: păstrează doar elementele care trec testul.

Spre deosebire de where, care creează un iterable nou, acestea două schimbă lista existentă. Sunt modul corect de a șterge mai multe elemente: ștergerea cu remove într-o buclă for-in pe aceeași listă dă eroare.

Parametri

Parametru Descriere
test Condiția verificată pe fiecare element.

Ce returnează

Nimic (void).

Exemple

Exemplul 1: Curățarea unei liste

void main() {
  final note = [9, 3, 7, 4, 10, 2];
  note.removeWhere((n) => n < 5);
  print('fără corigențe: $note');

  final mesaje = ['Salut', '', 'Ce faci?', '   ', 'Pa'];
  mesaje.retainWhere((m) => m.trim().isNotEmpty);
  print(mesaje);
}

Rezultat

fără corigențe: [9, 7, 10]
[Salut, Ce faci?, Pa]

Exemplul 2: De ce nu ștergi în for-in

void main() {
  final produse = ['lapte', 'expirat: iaurt', 'pâine', 'expirat: brânză'];
  try {
    for (final p in produse) {
      if (p.startsWith('expirat')) produse.remove(p);
    }
  } on ConcurrentModificationError {
    print('Eroare: lista s-a modificat în timpul parcurgerii');
  }
  produse.removeWhere((p) => p.startsWith('expirat'));
  print(produse);
}

Rezultat

Eroare: lista s-a modificat în timpul parcurgerii
[lapte, pâine]

Greșeli frecvente

  • Inversezi cele două: retainWhere păstrează ce trece testul, removeWhere șterge ce trece testul.

Comenzi înrudite

  • List.remove: Șterge un element după valoare (remove), după poziție (removeAt) sau ultimul element (removeLast).
  • Iterable.where: Păstrează doar elementele care trec un test; whereType păstrează doar elementele de un anumit tip.
  • Map.remove: remove scoate o cheie din map și returnează valoarea ei (sau null); clear golește tot map-ul.
  • Set.removeAll: removeAll șterge din set toate elementele date; retainAll păstrează doar elementele care apar în colecția dată.