Shakti
Shakti

Reputation: 2033

How to remove an array from a collection?

I have a collection of Integer[] and I want to remove some elements out of it, but seems the usual remove method won't work. Is there any other workaround other than iterating and comparing each of the elements of Integer[] . Below is the test code for this problem.

import java.util.ArrayList;
import java.util.List;


public class Test {

    public static void main(String args[]){
        List<Integer[]> subSet = new ArrayList<Integer[]>();
        subSet.add(new Integer[]{0,1,2,3,4});
        subSet.add(new Integer[]{0,1,2,3,5});
        subSet.add(new Integer[]{0,0,0,0,0});
        //prune this collection by removing an Integer[] 
        Integer[] elementToRemove = {0,0,0,0,0};
        System.out.println( "Before " + subSet.size());
        subSet.remove(elementToRemove);
        System.out.println( "After " + subSet.size());
        //
    }
}

Upvotes: 1

Views: 130

Answers (2)

Igor Tyulkanov
Igor Tyulkanov

Reputation: 5548

Try this solution, it works fine:

IntegerArray class:

public class IntegerArray {

    public final Integer[] array;

    public IntegerArray(Integer... array) {
        this.array = array;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof IntegerArray) {
            return Arrays.equals(this.array, ((IntegerArray) o).array);
        }
        return false;
    }

}

Test class:

public class Test {

    public static void main(String args[]){
        List<IntegerArray> subSet = new ArrayList<IntegerArray>();
        subSet.add(new IntegerArray(0,1,2,3,4));
        subSet.add(new IntegerArray(0,1,2,3,5));
        subSet.add(new IntegerArray(0,0,0,0,0));
        //prune this collection by removing an Integer[] 
        IntegerArray elementToRemove = new IntegerArray(0,0,0,0,0);
        System.out.println( "Before " + subSet.size());
        subSet.remove(elementToRemove);
        System.out.println( "After " + subSet.size());
    }
}

Upvotes: 1

Kyranstar
Kyranstar

Reputation: 1720

It's definitely possible with an iterator. Since arrays do not override equals, you need the static Arrays method.

 public static void main(String args[]){
        List<Integer[]> subSet = new ArrayList<Integer[]>();
        subSet.add(new Integer[]{0,1,2,3,4});
        subSet.add(new Integer[]{0,1,2,3,5});
        subSet.add(new Integer[]{0,0,0,0,0});
        //prune this collection by removing an Integer[] 
        Integer[] elementToRemove = {0,0,0,0,0};
        System.out.println( "Before " + subSet.size());

        //get your Integer[] iterator
        Iterator<Integer[]> it = subSet.iterator();
        //for each element in the array
        while(it.hasNext()){

            //check if it is equal to the elementToRemove
            if(Arrays.equals(it.next(), elementToRemove)){
                //remove it
                it.remove();
            }                   
        }
        System.out.println( "After " + subSet.size());
    }

Upvotes: 5

Related Questions