Pesquisa em dois ArrayList [RESOLVIDO]

4 respostas
R

Boa noite galera!!!
Estou com um problema que é o seguinte:

[list] insiro três despesas no ArrayList despesasFixas[];[/list]
[list]insiro dois pagamentos de despesas no ArrayList pagamento[];[/list]
[list]comparando os dois ArrayList, quero inserir em um terceiro ArrayList contasPagar[], somente as despesas que faltaram serem pagas, e não consigo.[/list]

Quando insiro somente um pagamento da certo, qdo mais de um pagamento não da certo.

Desde já agradeço pela atenção, de quem puder me ajudar.

String nomeDespPaga = null;
                     String nomeDesp = null;                      

                     for(int i=0; i<despFixas.size();i++){                    
                       nomeDesp=despFixas.get(i).getNomeDespesa();
                       
                       for(int a=0; a<PagamentoDespesas_CRUD.pagamento.size();a++){
                           nomeDespPaga= PagamentoDespesas_CRUD.pagamento.get(a).getNomeDespesaPaga();
                      

                           if(!nomeDesp.equals(nomeDespPaga) ){

                              DespesasFixas df1 = new DespesasFixas();

                              df1.setCodDespesa(despFixas.get(i).getCodDespesa());
                              df1.setDataDespesa(despFixas.get(i).getDataDespesa());
                              df1.setDataVencDespesa(despFixas.get(i).getDataVencDespesa());
                              df1.setNomeDespesa(despFixas.get(i).getNomeDespesa());
                              df1.setQuantParcelaPaga(despFixas.get(i).getQuantParcelaPaga());
                              df1.setQuantParcelaPagar(despFixas.get(i).getQuantParcelaPagar());
                              df1.setValorDespesa(despFixas.get(i).getValorDespesa());


                               contasPagar.add(df1);
                               
                          
             
                        }
                      
                      }

                    }

4 Respostas

sergiotaborda
reco162:
Boa noite galera!!! Estou com um problema que é o seguinte:

[list] insiro três despesas no ArrayList despesasFixas[];[/list]
[list]insiro dois pagamentos de despesas no ArrayList pagamento[];[/list]
[list]comparando os dois ArrayList, quero inserir em um terceiro ArrayList contasPagar[], somente as despesas que faltaram serem pagas, e não consigo.[/list]

Quando insiro somente um pagamento da certo, qdo mais de um pagamento não da certo.

Desde já agradeço pela atenção, de quem puder me ajudar.

String nomeDespPaga = null;
                     String nomeDesp = null;                      

                     for(int i=0; i<despFixas.size();i++){                    
                       nomeDesp=despFixas.get(i).getNomeDespesa();
                       
                       for(int a=0; a<PagamentoDespesas_CRUD.pagamento.size();a++){
                           nomeDespPaga= PagamentoDespesas_CRUD.pagamento.get(a).getNomeDespesaPaga();
                      

                           if(!nomeDesp.equals(nomeDespPaga) ){

                              DespesasFixas df1 = new DespesasFixas();

                              df1.setCodDespesa(despFixas.get(i).getCodDespesa());
                              df1.setDataDespesa(despFixas.get(i).getDataDespesa());
                              df1.setDataVencDespesa(despFixas.get(i).getDataVencDespesa());
                              df1.setNomeDespesa(despFixas.get(i).getNomeDespesa());
                              df1.setQuantParcelaPaga(despFixas.get(i).getQuantParcelaPaga());
                              df1.setQuantParcelaPagar(despFixas.get(i).getQuantParcelaPagar());
                              df1.setValorDespesa(despFixas.get(i).getValorDespesa());


                               contasPagar.add(df1);
                               
                          
             
                        }
                      
                      }

                    }

Vc precisa de um identificador melhor que o nome da despesa, mas usando isso e assumindo que isso é um identificador ...

O processo é simples. Vc precia registrar o que ha a pagar e remover o que pagou. Se usar os identificadores fica fácil. Ficariam mais fácil se os objetos nas duas listas fossem o mesmo, mas como não são eis uma opção

// criar um Set com o identificador 

Set<String> identificadores = new HashSet<>();
   for(int i=0; i<despFixas.size();i++){                    
          identificadores.add(despFixas.get(i).getNomeDespesa());
  }

//agora remove todos os que pagou 
  for(int a=0; a<PagamentoDespesas_CRUD.pagamento.size();a++){
                     identificador.remove(pagamento.get(a).getNomeDespesaPaga());
  }

//neste momento o set identificadores contém os identificadores de todas as despesas que faltam pagar.

Algumas diretrizes:
desconfie de for dentro de for. Substitua pelo uso de Map ou Set
Use numeros inteiros sem significado como identificadores. Duas despesas podem ser diferentes e ter o mesmo nome
Preocupe-se com a nomenclatura que usa. Use i,j,k para indices de for ( ou menor ainda use o for extendido ). Não use _ nos nomes.

R
Sergio valeu pela dica, mas estou usando java 6.9 e ao tentar implementar este código que vc me enviou, deu erro nesta linha:

Set identificadores = new HashSet<>();

diamond operator is not supported in -source 1.5
   (use -source 7 or higher to enable diamond operator)

regis_hideki

Troque por isso:

Set<String> identificadores = new HashSet<String>();
R

regis_hideki:
Troque por isso:

Set<String> identificadores = new HashSet<String>();

Criado 15 de agosto de 2012
Ultima resposta 19 de ago. de 2012
Respostas 4
Participantes 3