Rimuovere elementi da ArrayList in Java con removeIf

Mattepuffo's logo
Rimuovere elementi da ArrayList in Java con removeIf

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!


Condividi

Commentami!