PROBLEMAS COM: Set<String> identificadores = new HashSet<String>();

1 resposta
R

Galera, bom dia.
Peço ajuda de vcs com este problema.
Desde já agradeço por sua atenção.

Tenho este método para pegar os dados do banco e apresentá-los em um jTable(contas à pagar). No caso específico deste método é para ele retornar uma lista somente com as despesas que ainda não foram pagas. Acontece que foi criado um objeto
Set<String> identificadores = new HashSet<String>();
, para selecionar esses dados, mas na hora dos dados serem removidos
identificadores.remove(PagamentoDespesas_CRUD.pagDesp.get(a).getNomeDespesaPaga());
, não os são removidos completamente como deveriam ser, algumas contas que já foram pagas permanecem como não sendo pagas. OBS.: o array pagDesp, contém todas as despesas pagas, porém as que estão contidas no array e são iguais as do identificador não são removidas completamente, sempre ficam uma ou duas despesas que já foram pagas, na hora que são apresentadas no jTable(contas à pagar).
public List listar_dados3() {

       

     List<DespesasFixas_model> lista = new ArrayList<DespesasFixas_model>();

      try{
          co.conectar();
          PreparedStatement stmt = co.con.prepareStatement(
                "SELECT * FROM despesasfixas");

        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {


          DespesasFixas_model d = new DespesasFixas_model();

          d.setIdDespfx(rs.getInt("idDespfx"));
          d.setNomeDespesa(rs.getString("nomeDesp"));
          d.setValorDespesa(rs.getDouble("valordesp"));
          d.setDataDespesa(rs.getDate("datadesp"));
          d.setDataVencDespesa(rs.getDate("datavenc"));
          
          despFixas.add(d);

       }


          //criar um Set com o identificador

Set<String> identificadores = new HashSet<String>();
   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.pagDesp.size();a++){
      
                     identificadores.remove(PagamentoDespesas_CRUD.pagDesp.get(a).getNomeDespesaPaga());

  }

//neste momento o set identificadores contém os identificadores de todas as despesas que faltam pagar.
              for(int i=0; i<despFixas.size();i++){

                  //este metodo contains()retorna true se o elemento especificado for encontrado
                if(identificadores.contains(despFixas.get(i).getNomeDespesa())){
                    
                     DespesasFixas_model df1 = new DespesasFixas_model();

                              df1.setIdDespfx(despFixas.get(i).getIdDespfx());
                              df1.setNomeDespesa(despFixas.get(i).getNomeDespesa());
                              df1.setValorDespesa(despFixas.get(i).getValorDespesa());
                              df1.setDataDespesa(despFixas.get(i).getDataDespesa());
                              df1.setDataVencDespesa(despFixas.get(i).getDataVencDespesa());


                             lista.add(df1);
                              
                }
                 }



               
        stmt.close();
          
      }catch(SQLException e){
            JOptionPane.showMessageDialog(null, "ERRO..."+e.getMessage(), "Consulta de Despesas Fixas", 0);
      }
      return lista;
    }
   }

1 Resposta

DaniloAndrade

Bom dia!

vamos ver ser consigo te ajudar.

primeiro uma observação suas despesas tem um “IdDespfx” porque não usar ele ao invés de usar “NomeDespesa”?

aqui:

for(int i=0; i<despFixas.size();i++){  
          identificadores.add(despFixas.get(i).getNomeDespesa());  
  }

você está usando NomeDespesa para adicionar no set identificadores

e aqui:

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

vc usa o getNomeDespesaPaga() para remove-los da lista vc tem certeza que a String do NomeDespesa é igual ao getNomeDespesaPaga

se ou ver espaços na string ele não irá remover do set por isso seria melhor usar o IdDespfx que é um int

Criado 21 de dezembro de 2012
Ultima resposta 21 de dez. de 2012
Respostas 1
Participantes 2