Erro deletar objeto List<String>

2 respostas Resolvido
java
Jederson_Andre

Como vão developers
Estou lendo um tabela na base de dados da minha aplicaçao, logo apos armazeno as informações em uma List:

Pessoas_Dao dao = new Pessoas_Dao();
List<Pessoas_Model> listaPrestador = dao.carregarListaPrestadoresCadastrados();

A minha aplicação deve: ler um arquivo com a extensão RE, dentro deste arquivo vou recuperar as seguintes informações: nome e PIS, que estão em posições especificas.
Ate aqui tudo bem, eu criei um list que armazena as linhas recuperadas do arquivo, e leio assim:

// armazena, apos verificação, os prestadores que ja possuem cadastroes
List<Pessoas_Model> prestCadastrado = new ArrayList<>();

for (String dado : dados) {
        String pis = dado.substring(32, 43);
        String nome = dado.substring(53, 123);

        // compara o pis com objetos da lista recuperada da base de dados
        // cadastro que existir na base, sera removido da lista prestador e add na lista 
        // prestCadastrados
        for (Pessoas_Model prestador1 : listaPrestador) { // erro acontece aqui
            if (pis.equals(prestador1.getPisPasep())) {
                System.out.println("Linha Pis: " + pis + "  Objeto prestdor1: " + prestador1.getNome_pessoa() + " PIS: " + prestador1.getPisPasep());
                prestCadastrado.add(prestador1);
                listaPrestador.remove(prestador1);
            }
        }
    }

o seguinte erro é informado:

Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at Controller.CarregarArquivo.verificarPisPasep(CarregarArquivo.java:87)
at View.Form_principal.jButton1ActionPerformed(Form_principal.java:169)
at View.Form_principal.access$400(Form_principal.java:23)
at View.Form_principal$5.actionPerformed(Form_principal.java:133)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java

2 Respostas

RodrigoV10
Solucao aceita

Buenas colega.
Esse erro ocorre, pois, está tentando modificar uma lista que está sendo lida.

for (Pessoas_Model prestador1 : listaPrestador) { // erro acontece aqui
        if (pis.equals(prestador1.getPisPasep())) {
            System.out.println("Linha Pis: " + pis + "  Objeto prestdor1: " + prestador1.getNome_pessoa() + " PIS: " + prestador1.getPisPasep());
            prestCadastrado.add(prestador1);
            listaPrestador.remove(prestador1);
        }
    }

Veja, está fazendo um laço de listaPrestador e logo dentro do if está tentando remover modificar esta mesma lista, nesta caso tentando remover. Se quer modificar a lista que está lendo, deve utilizar o Iterator:

for (Iterator it = listaPrestador.iterator(); it.hasNext();) {
        Pessoas_Model prestador1 = it.next();
        
        if (pis.equals(prestador1.getPisPasep())) {
            System.out.println("Linha Pis: " + pis + "  Objeto prestdor1: " + prestador1.getNome_pessoa() + " PIS: " + prestador1.getPisPasep());
            prestCadastrado.add(prestador1);

            it.remove();//Remova aqui!!!
        }
}
Jederson_Andre

Opaaaa resolvido… vlw mesmo companheiro

Criado 11 de maio de 2018
Ultima resposta 11 de mai. de 2018
Respostas 2
Participantes 2