I'm studing apex now and dont understand the situation with list and iterator. In java you cant delete in any way elements from list while iterating it. So therefore developers added iterator and also added removeAll method to list. Here are some examples.
Deleting element by using another list in java:
List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); List<Integer> listToRemove = new ArrayList<Integer>(); for (Integer num : list) { if (num==1){ listToRemove.add(num); } } list.removeAll(listToRemove); System.out.println(list);
Result: [2, 3]
Deleting element by using iterator in java:
Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ if(iterator.next() == 1){ iterator.remove(); } } System.out.println(list);
Result: [2, 3]
Ok, then i decided to do the same on apex.
Firstly, i didn't find removeAll method for list. Bad luck :)
Then i found iterator and thought that logic is the same as in java, but got this:
Method does not exist or incorrect signature: [Iterator].remove()
Almost the same, they kept hasNext(), next(), but they did not keep a remove() method. Why? :)
Then i tried to do something like this:
Iterator<Integer> iter = li.iterator(); Integer count = 0; while(iter.hasNext()){ Integer temp = iter.next(); if(temp == 1){ li.remove(count); } count++; } System.debug(li);
It doesn't work also.
So the only way that works for me is:
for (Integer i = 0; i < li.size(); i++) { if (li.get(i) == 1){ li.remove(i); i--; } }
Can you please share with me with the best way of removing elements form list!? Thanks in advance!
List<T>
in Apex is a JavaArrayList
type which is a resizable array. When you remove an item from the array, the entire collection shifts left (one position removed from the element indices).