Вы можете сделать это, взломав свой путь, но это очень подозрительно, и если вам это действительно нужно, вы, вероятно, делаете что-то не так.
Вам может понадобиться другая коллекция, куда вы можете положить обработанные значения,
List<Integer> values = Arrays.asList(1,2,4,16,32,64,128);
List<Integer> newValues = new LinkedList();
for (Integer value: values) {
newValues.add(value / 2);
}
Или, если вы спросите, можете ли вы просто переназначить значение итератора, конечно, это возможно, но опять же немного подозрительно. Возможно, вы можете использовать его в таком случае;
List<Integer> values = Arrays.asList(1,2,4,16,32,64,128);
for (Integer value: values) {
if(value > 32)
value = 32;
process(value);
}
Так как я переназначаю итератор value
, это безопасно, однако редактирование коллекции во время зацикливания может привести к ConcurrentModificationException
или хуже (хакерский путь), поскольку вы не всегда можете определить поведение своей реализации списка.