Ce face List.removeAll
removeAll(c) șterge din listă toate aparițiile oricărui element din c. retainAll(c) face invers: păstrează doar elementele care apar în c și le șterge pe celelalte. Ordinea elementelor rămase nu se schimbă.
Ambele returnează true dacă lista s-a modificat. Compararea se face cu equals, iar c poate fi orice colecție. Dacă c este mare, e mai rapid să fie un HashSet, pentru că pentru fiecare element al listei se apelează c.contains(...).
Parametri
| Parametru | Descriere |
|---|---|
c |
Colecția cu valorile de șters (removeAll) sau de păstrat (retainAll). |
Ce returnează
true dacă lista s-a schimbat.
Exemple
Exemplul 1: Scoaterea produselor indisponibile
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
List<String> cos = new ArrayList<>(List.of("lapte", "ouă", "pâine", "ouă", "unt"));
Set<String> lipsa = Set.of("ouă", "unt");
boolean schimbat = cos.removeAll(lipsa);
System.out.println(schimbat + " " + cos);
}
}
Rezultat
true [lapte, pâine]
Exemplul 2: Elevi prezenți la ambele ore (retainAll)
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> mate = new ArrayList<>(List.of("Ana", "Mihai", "Ioana", "Radu"));
List<String> romana = List.of("Ioana", "Ana", "Elena");
mate.retainAll(romana);
System.out.println("La ambele: " + mate);
System.out.println("A doua oară: " + mate.retainAll(romana));
}
}
Rezultat
La ambele: [Ana, Ioana]
A doua oară: false
Greșeli frecvente
- Crezi că
removeAllșterge doar prima apariție. Le șterge pe toate. - Folosești
retainAllpe o listă și pierzi datele originale. Dacă mai ai nevoie de ele, lucrează pe o copie:new ArrayList<>(lista).
Comenzi înrudite
List.remove: Șterge elementul de la o poziție sau prima apariție a unei valori; elementele de după se mută la stânga.Collection.removeIf: Șterge din colecție toate elementele pentru care condiția dată este adevărată. Returnează true dacă s-a șters ceva.List.contains: Verifică dacă lista conține o valoare (contains) sau toate valorile altei colecții (containsAll).