Rimuovere elementi da ArrayList in Java con removeIf
In un programma in Java, ho un ArrayList di Integer, con dati presi da database.
Da questa lista dovevo rimuovere tutti i numeri minori o uguali a zero.
Volevo modificare la query; ma non essendo mio il server, ho dovuto fare in altro modo.
La prima cosa che mi è venuta in mente è stata una cosa del genere:
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
List<Integer> list = new CopyOnWriteArrayList<>(Arrays.asList(0, 2, -6, 19, 1, -22, 9, 0));
Iterator<Integer> it = list.iterator();
for (Integer numero : list) {
if (numero <= 0) {
list.remove(numero);
}
}
System.out.println(list);
}
}
Notate l'uso di CopyOnWriteArrayList per ovviare all'eccezione java.util.ConcurrentModificationException.
Girovagando per la Javadoc di ArrayList ho però trovato il metodo removeIf!
Questo metodo accetto un predicato, ed agisce in base a quello evitandoci l'iterazione.
Ecco un esempio:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(0, 2, -6, 19, 1, -22, 9, 0));
list.removeIf(n -> n <= 0);
System.out.println(list);
}
}
Ovviamente il tutto si può applicare anche ad altri tipi di dato; ad esempio:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("matteo", "gino", "francesca", "michela"));
list.removeIf(n -> n.startsWith("m"));
System.out.println(list);
}
}
Qui abbiamo levato tutti i nomi che cominciano con la lettera m.
Enjoy!
java arraylist removeif copyonwritearraylist
Commentami!