Possuo duas Listas. A lista registros possui todos os dados. Ja a lista indiceRemovido contem os indices que devem ser removidos da lista registros. Abaixo segue código. Na primeira iteração os items são removidos corretamente, mas na segunda os índices são atualizados e acaba removendo o índice errado. Por exemplo tenho q remover os indices 1 e 2. Na primeira iteração é removido o 1. Porém na segunda iteração o indice 2 na verdade possue o valor original do indice 3;
///////////////////////////////
for (int i = 0; i < indiceRemovido.size(); i++)
{
System.out.println("Lista \n"+indiceRemovido.get(i).toString());
indice= indiceRemovido.get(i);
registros.remove(indice);
}
Acho que isso acontece pois o remove vai fazer shift de todos os elementos.
Tenta apenas fazer set a null do índice a ser removido, algo como:
registros.set(indice, null);
Só que isto vai deixar “buracos” null no seu array, a não ser que queira evitar isto e ter que limpar os valores null depois, pode continuar com o remove mas fazendo remove do indice com um contador, que começaria no 0.
A interface List possui o método remove, que é sobrecarregado e aceita como parâmetro um int, referente ao índice a ser removido ou um Object, referente ao objeto a ser removido.
Além disso, possui o método removeAll que aceita como parâmetro uma Collection<?> e cuja lógica de exclusão se baseia em identificar todos os elementos presentes na Collection<?> passada como argumento e remove-os da lista original.
Minha sugestão seria criar uma terceira lista, adicionar os elementos que são referenciados pelos índices a serem removidos e depois invocar o método removeAll
List<?> lista = new ArrayList<>();
for (int i = 0; i < indiceRemovido.size(); i++) {
System.out.println("Lista \n"+indiceRemovido.get(i).toString());
lista.add(registros.get(indiceRemovido.get(i));
}
registros.removeAll(lista);
P.S.: É importante ressaltar que esta, provavelmente, não seja uma solução muito performática.