Reputation: 2033
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
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
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