Вы можете либо использовать итератор прямо так, как вы упомянули, либо сохранить вторую коллекцию и добавить каждый элемент, который хотите удалить, в новую коллекцию, а затем удалитьAll в конце. Это позволяет вам использовать безопасность типа для каждого цикла за счет увеличения использования памяти и времени процессора (не должно быть огромной проблемой, если у вас нет действительно больших списков или действительно старого компьютера)
public static void main(String[] args)
{
Collection<Integer> l = new ArrayList<Integer>();
Collection<Integer> itemsToRemove = new ArrayList<Integer>();
for (int i=0; i < 10; ++i) {
l.add(new Integer(4));
l.add(new Integer(5));
l.add(new Integer(6));
}
for (Integer i : l)
{
if (i.intValue() == 5)
itemsToRemove.add(i);
}
l.removeAll(itemsToRemove);
System.out.println(l);
}
Он «преднамерен», поскольку он является продуктом того, как угловые ручки ng-repeat. По сути, клонируются множественные копии разметки (разметка внутри ng-repeat используется в качестве шаблона) и скомпилируются отдельно для каждого элемента, который вы выполняете. Таким образом, угловая составляющая в основном компилирует 3 <li ng-switch-when='1' ....>
и 3 <li ng-switch-default ....>
, но делает это вне контекста - нет элемента ng-switch-on для сравнения.
Вы можете видеть, что это происходит проверяя полученную разметку:
<ul ng-switch="" on="toggle">
<!-- ngRepeat: entry in array -->
<!-- ngSwitchWhen: 1 -->
<!-- ngSwitchWhen: 1 -->
<!-- ngSwitchWhen: 1 -->
<!-- ngRepeat: entry in array -->
<!-- ngSwitchDefault: -->
<!-- ngSwitchDefault: -->
<!-- ngSwitchDefault: -->
</ul>
Обе директивы - ng-repeat и ng-switch - должны обрабатываться с осторожностью, поскольку они (в отличие, например, ng-show или ng-hide) сильно влияют состав. Второй (рабочий) Plunker - это путь, который работает только с директивами ПОСЛЕ (структурно, INSIDE) логики ng-switch.