How to find the differences from 2 ArrayLists of Strings?

Lorenzo Calosci picture Lorenzo Calosci · Jun 4, 2013 · Viewed 15.6k times · Source

I have 2 Strings:

A1=[Rettangolo, Quadrilatero, Rombo, Quadrato]
A2=[Rettangolo, Rettangolo, Rombo, Quadrato]

I want to obtain this: "I have found "Quadrilatero", instead of "Rettangolo" ". If I use removeAll() or retainAll() it doesn't work because I have 2 instances of "Rettangolo". In fact, if I use a1.containsAll(a2), I get true and I want false.

Thanks all for considering my request.

Answer

AnthonyW picture AnthonyW · Jun 4, 2013

Use the remove method from ArrayList. It only removes the first occurance.

public static void main(String []args){
        //Create ArrayLists
        String[] A1 = {"Rettangolo", "Quadrilatero", "Rombo", "Quadrato"};
        ArrayList<String> a1=new ArrayList(Arrays.asList(A1));
        String[] A2 ={"Rettangolo", "Rettangolo", "Rombo", "Quadrato"};
        ArrayList<String> a2=new ArrayList(Arrays.asList(A2));
        // Check ArrayLists
        System.out.println("a1 = " + a1);
        System.out.println("a2 = " + a2);
        // Find difference
        for( String s : a1)
            a2.remove(s);
        // Check difference
        System.out.println("a1 = " + a1);
        System.out.println("a2 = " + a2);
}

Result

a1 = [Rettangolo, Quadrilatero, Rombo, Quadrato]
a2 = [Rettangolo, Rettangolo, Rombo, Quadrato]
a1 = [Rettangolo, Quadrilatero, Rombo, Quadrato]
a2 = [Rettangolo]